node cluster模块,仿多线程并发调用,

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)
})

master.js

module.exports = exuteFibo

function exuteFibo() {
return (new Promise((reslove, reject) => {
var cluster = require('cluster')
const numCpus = require('os').cpus().length
var result = []
var workerID = []
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()
workerID.push(wk.id)
wk.send(collection[i])
}
cluster.on('fork', worker => {
if (workerID.includes(worker.id)) {
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}`)
result.push(msg)
numCount++
if (numCount == collection.length) {
console.log(`master finish all work adn using ${Date.now() - st} ms`)
workerID.forEach(function(id) {
if (!cluster.workers[id].exitedAfterDisconnect) {
cluster.workers[id].disconnect();
}
})
reslove(result)
}
})
})
}
}))
}

testMaster.js

var exuteFibo = require('./masterFinal.js')
console.log('====start=======')
var st = Date.now()

exuteFibo().then(rs => {
console.log(`Finish all work and using ${Date.now()-st}`)
console.log('####Get result from multipe-processes:' + rs)
})

st = Date.now()

exuteFibo().then(rs => {
console.log(`Finish all work and using ${Date.now()-st}`)
console.log('####Get result from multipe-processes:' + rs)
})

运行结果:

====start=======

[master]: fork worker 1

[master]: fork worker 2

[master]: fork worker 3

[master]: fork worker 4

[master]: fork worker 5

[master]: fork worker 6

[master]: fork worker 7

[master]: fork worker 8

worker 4 start...

worker 1 start...

 4 receive data is 41

worker 4 start to work

worker 2 start...

worker 3 start...

 1 receive data is 41

worker 1 start to work

 2 receive data is 41

worker 2 start to work

worker 5 start...

 5 receive data is 41

worker 5 start to work

 3 receive data is 41

worker 3 start to work

worker 6 start...

 6 receive data is 41

worker 6 start to work

worker 7 start...

 7 receive data is 41

worker 7 start to work

worker 8 start...

 8 receive data is 41

worker 8 start to work

worker 4 finish work and using 9574 ms

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

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

worker 7 finish work and using 9519 ms

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

worker 6 finish work and using 9652 ms

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

worker 1 finish work and using 9732 ms

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

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

master finish all work adn using 9956 ms

Finish all work and using 9957

####Get result from multipe-processes:165580141,165580141,165580141,165580141

[master]:worker 6 died

[master]:worker 6 died

[master]:worker 7 died

[master]:worker 7 died

worker 2 finish work and using 9778 ms

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

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

worker 5 finish work and using 9780 ms

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

[master]:worker 5 died

[master]:worker 5 died

worker 3 finish work and using 9798 ms

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

master finish all work adn using 10044 ms

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

Finish all work and using 10033

####Get result from multipe-processes:165580141,165580141,165580141,165580141

[master]:worker 4 died

[master]:worker 4 died

[master]:worker 1 died

[master]:worker 1 died

[master]:worker 2 died

[master]:worker 2 died

[master]:worker 3 died

[master]:worker 3 died

worker 8 finish work and using 9192 ms

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

[master]:worker 8 died

[master]:worker 8 died

 

转载于:https://www.cnblogs.com/qiyc/p/9379148.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值