zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    021.day21 反射 Class类 反射常用操作
    020.day20 线程概述 多线程优缺点 线程的创建 线程常用方法 生命周期 多线程同步
    019.day19 缓冲流 对象流 标准输入输出流
    018.day18 map集合如何实现排序 File类 IO流 字节流 字符流 编码
    017.day17 Map接口 克隆 treeSet集合排重缺陷
    016.day16 HashSet TreeSet 比较器Comparable Comparator
    015.day15
    014.day14
    013.day13
    线程
  • 原文地址:https://www.cnblogs.com/qiyc/p/9373579.html
Copyright © 2011-2022 走看看