• node中的cluster模块开启进程,进程共享数据


    说明:共享数据 var collection = [41, 41, 41, 41]

    master.js

             

    console.log('###---start---###')


    var cluster = require('cluster')
    const numCpus = require('os').cpus().length
    cluster.setupMaster({
    exec: 'worker.js',
    slient: true
    })
    if (cluster.isMaster) {
    var collection = [41, 41, 41, 41]
    var st = Date.now()
    for (let i = 0; i < numCpus; i++) {
    var wk = cluster.fork()
    wk.send(collection[i])
    }
    cluster.on('fork',worker=>{
    console.log(`[master]: fork worker ${worker.id}`)
    })
    cluster.on('exit',(worker,code,signal)=>{
    console.log(`[master]:worker ${worker.id} died`)
    })

    var numCount = 0
    Object.keys(cluster.workers).forEach(id=>{
    cluster.workers[id].on('message',msg=>{
    console.log(`[master] receive message from [worker ${id}]:${msg}`)
    numCount++
    if(numCount == collection.length){
    console.log(`master finish all work adn using ${Date.now() - st} ms`)
    cluster.disconnect()
    }

    })
    })
    }

    worker.js

    var cluster = require('cluster')
    function fibo(n) {
    return n == 0 ? 0 : n > 1 ? fibo(n - 1) + fibo(n - 2) : 1
    }
    console.log(`worker ${cluster.worker.id} start...`)
    process.on('message',msg=>{
    console.log(` ${cluster.worker.id} receive data is ${msg}`)
    var st = Date.now()
    console.log(`worker ${cluster.worker.id} start to work`)
    var result = fibo(msg)
    console.log(`worker ${cluster.worker.id} finish work and using ${Date.now() - st} ms`)
    process.send(result)
    })

    打印日志如下: 

    node master.js

    ###---start---###

    [master]: fork worker 1

    [master]: fork worker 2

    [master]: fork worker 3

    [master]: fork worker 4

    worker 4 start...

    worker 2 start...

     4 receive data is 41

     2 receive data is 41

    worker 2 start to work

    worker 4 start to work

    worker 1 start...

     1 receive data is 41

    worker 1 start to work

    worker 3 start...

     3 receive data is 41

    worker 3 start to work

    worker 2 finish work and using 4905 ms

    [master] receive message from [worker 2]:165580141

    worker 4 finish work and using 4918 ms

    [master] receive message from [worker 4]:165580141

    worker 1 finish work and using 4921 ms

    [master] receive message from [worker 1]:165580141

    worker 3 finish work and using 4933 ms

    [master] receive message from [worker 3]:165580141

    master finish all work adn using 5094 ms

    [master]:worker 1 died

    [master]:worker 4 died

    [master]:worker 2 died

    [master]:worker 3 died

  • 相关阅读:
    SAE/ISO standards for Automotive
    The J1850 Core
    SAE J1708 DS36277 MAX3444, DS75176B
    X431 元征诊断枪
    凯尔卡C68全球版汽车电脑诊断仪
    汽车王牌
    Vehicle’s communication protocol
    Vehicle Network Protocols -- ISO/KWP CAN CCD PCI SCI / SCP / Class 2
    On-board diagnostics -- Standards documents
    On-board diagnostics connector SAE J1962
  • 原文地址:https://www.cnblogs.com/qiyc/p/9373579.html
Copyright © 2020-2023  润新知