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