首页 > 解决方案 > 为什么从 worker 到 master 的 IPC 消息的时间很慢?(>400ms)

问题描述

我目前有下面的Node JS(v10.9.0)代码来测试使用IPC(进程间通信)从子进程到主进程的消息时间:

var cluster = require('cluster');

var masterTimer
var workerTimer

if (cluster.isMaster) {

let testWorker = cluster.fork({
    workerId : 1

})

console.log("Hi from the master")

masterTimer = process.hrtime();

testWorker.on('message', function (msg) {
    console.log(msg.message)

    console.log("Elapsed (Master): " + process.hrtime(masterTimer)[1]/1000000 + "ms")

    testWorker.destroy()
})

workerTimer = process.hrtime();
testWorker.send({message: "Message from master to worker."})


} else {
if (process.env.workerId == 1) {

    setTimeout(() => {
        process.send({ message: 'Hi from the worker!' });    
    }, 3000);

    process.on('message', function (msg) {
        console.log(msg.message)

        console.log("Elapsed (Worker): " + process.hrtime(workerTimer)[1]/1000000 + "ms")

    })
}
}

此代码在我的8 核 MacBook Pro 2017版上的输出是:

Hi from the master
Message from master to worker.
Elapsed (Worker): 113.685926ms
Hi from the worker!
Elapsed (Master): 476.501366ms

与从 master 到 worker 的消息相比,从 worker 到 master 的消息的时间非常慢(在这个数据点上慢了大约 4 倍)。此外,与单个语句的亚毫秒操作相比,消息传递通常很慢。代码有问题还是应该这么慢?

标签: node.jsnpmipc

解决方案


推荐阅读