为什么子进程的第一次消息延迟很大?

时间:2017-08-06 17:37:47

标签: javascript node.js child-process

所以我一直在Node.js做一些微优化。我注意到,当多线程时,子进程有一个巨大的第一个消息延迟。以下面的代码为例:

RUN IT HERE

index.js

var cp = require('child_process');
var child = cp.fork(__dirname + '/worker.js');

var COUNT = 10;
var start;

child.on('message', (e) => { 
  var end = Date.now();
  console.log('Response time', end - start);
  if(COUNT--) {
    sendMessage();
  } else {
    process.exit();
  }
});

function sendMessage () {
  start = Date.now();
  child.send('hi!');
}

sendMessage();

worker.js

process.on('message', e => {
  process.send('Good morning!');
});

说明:我正在做的就是创建一个子进程并向其发送消息,它将立即响应。我正在测量发送消息和接收响应之间的时间。几乎每次都会发生以下输出:

Response time 51
Response time 0
Response time 0
Response time 0
Resp...

第一条消息/响应对之间存在巨大延迟。我已经注意到了这个用于子进程的其他项目。这是为什么会发生的?我该如何解决?

编辑:经过一些调试后,延迟似乎发生在第一个child.send到第一个process.on回调之后。儿童过程的反应几乎没有延迟。

相关:https://github.com/nodejs/node/issues/3145

0 个答案:

没有答案