diff options
author | Brian White <mscdex@mscdex.net> | 2017-06-05 03:15:14 +0300 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2017-06-10 18:54:37 +0300 |
commit | 0ca4bd1e18b50b90b626bccb2fbc6b023fd5a6d1 (patch) | |
tree | bcbcc84d8b04a731721c5ff7337c7e3e9ef21784 /benchmark | |
parent | d1fa59fbb7012f8edd37a37cd668b747664c018d (diff) |
child_process: reduce nextTick() usage
PR-URL: https://github.com/nodejs/node/pull/13459
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Diffstat (limited to 'benchmark')
-rw-r--r-- | benchmark/cluster/echo.js | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/benchmark/cluster/echo.js b/benchmark/cluster/echo.js new file mode 100644 index 00000000000..0733bdbd207 --- /dev/null +++ b/benchmark/cluster/echo.js @@ -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); + }); +} |