node.jssubprocess和手动分离进程的区别?

我试图确定我的socket.io服务器的响应时间。 所以socket.io服务器只是回应一个消息,一个testing文件发送消息并logging发送和获取回显之间所需的时间。 为了模拟多个客户端,我使用一个manager文件中的child_process多次启动这个testing文件。

奇怪的是,我只用一个testing文件就得到了0.2的响应时间。 当我开始经理产生4个客户时,它达到了1.3,当我在两个分别的terminal上启动两个经理,每个客户有4个客户,每个客户达到3个左右。但是当我开始只有一个经理与10个客户(甚至达到疯狂像1000)结果保持在1以下。

为了再次certificate这一点:

manager.js 4 -> spawns 4 childs manager.js 4 -> spawn 4 childs test.js -> shows around 3 avg. response time manager.js 10 -> spawns 10 childs test.js -> shows around 0.5 avg. response time 

那么为什么多个分开的电话产生4个孩子更多的负载,然后一个电话与许多孩子?

这是我的经理文件产卵孩子:

 var count = process.argv[2] || 1; console.log("generating " + count + " childs"); for (var i = 0; i < count; i++){ var childProcess = require('child_process'); childProcess.exec('node test.js', function (error, stdout, stderr) { if (error) { console.log(error.stack); console.log('Error code: '+error.code); console.log('Signal received: '+error.signal); } console.log('Child Process STDOUT: '+stdout); console.log('Child Process STDERR: '+stderr); }); } 

这是我的testing文件精确的最后一秒的平均响应时间:

 var io = require('socket.io-client'); var rtts = []; var socket = io.connect('http://localhost:3000'); socket.emit('roundtrip', { time: new Date().getTime() }); socket.on('roundtrip', function (data) { var roundtripTime = new Date().getTime() - data.time; rtts.push(roundtripTime); socket.emit('roundtrip', { time: new Date().getTime() }); }); setInterval(function(){ avgRTT = 0; for (var i = 0; i < rtts.length; i++){ avgRTT += rtts[i]; } avgRTT = avgRTT / rtts.length; console.log("AVG RTT: " + avgRTT); rtts = []; }, 1000); 

我正在linux mint 64位上运行这个。