mirror of https://github.com/lukechilds/node.git
Browse Source
PR-URL: https://github.com/nodejs/node/pull/13459 Reviewed-By: Refael Ackermann <refack@gmail.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>v6
2 changed files with 102 additions and 21 deletions
@ -0,0 +1,70 @@ |
|||||
|
'use strict'; |
||||
|
|
||||
|
const cluster = require('cluster'); |
||||
|
if (cluster.isMaster) { |
||||
|
const common = require('../common.js'); |
||||
|
const bench = common.createBenchmark(main, { |
||||
|
workers: [1], |
||||
|
payload: ['string', 'object'], |
||||
|
sendsPerBroadcast: [1, 10], |
||||
|
n: [1e5] |
||||
|
}); |
||||
|
|
||||
|
function main(conf) { |
||||
|
var n = +conf.n; |
||||
|
var workers = +conf.workers; |
||||
|
var sends = +conf.sendsPerBroadcast; |
||||
|
var expectedPerBroadcast = sends * workers; |
||||
|
var payload; |
||||
|
var readies = 0; |
||||
|
var broadcasts = 0; |
||||
|
var msgCount = 0; |
||||
|
|
||||
|
switch (conf.payload) { |
||||
|
case 'string': |
||||
|
payload = 'hello world!'; |
||||
|
break; |
||||
|
case 'object': |
||||
|
payload = { action: 'pewpewpew', powerLevel: 9001 }; |
||||
|
break; |
||||
|
default: |
||||
|
throw new Error('Unsupported payload type'); |
||||
|
} |
||||
|
|
||||
|
for (var i = 0; i < workers; ++i) |
||||
|
cluster.fork().on('online', onOnline).on('message', onMessage); |
||||
|
|
||||
|
function onOnline(msg) { |
||||
|
if (++readies === workers) { |
||||
|
bench.start(); |
||||
|
broadcast(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function broadcast() { |
||||
|
var id; |
||||
|
if (broadcasts++ === n) { |
||||
|
bench.end(n); |
||||
|
for (id in cluster.workers) |
||||
|
cluster.workers[id].disconnect(); |
||||
|
return; |
||||
|
} |
||||
|
for (id in cluster.workers) { |
||||
|
const worker = cluster.workers[id]; |
||||
|
for (var i = 0; i < sends; ++i) |
||||
|
worker.send(payload); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function onMessage(msg) { |
||||
|
if (++msgCount === expectedPerBroadcast) { |
||||
|
msgCount = 0; |
||||
|
broadcast(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} else { |
||||
|
process.on('message', function(msg) { |
||||
|
process.send(msg); |
||||
|
}); |
||||
|
} |
Loading…
Reference in new issue