所以我一直在Node.js做一些微优化。我注意到,当多线程时,子进程有一个巨大的第一个消息延迟。以下面的代码为例:
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
回调之后。儿童过程的反应几乎没有延迟。