Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian White <mscdex@mscdex.net>2017-06-05 03:15:14 +0300
committerAnna Henningsen <anna@addaleax.net>2017-06-10 18:54:37 +0300
commit0ca4bd1e18b50b90b626bccb2fbc6b023fd5a6d1 (patch)
treebcbcc84d8b04a731721c5ff7337c7e3e9ef21784 /benchmark
parentd1fa59fbb7012f8edd37a37cd668b747664c018d (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.js70
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);
+ });
+}