node.js - 为什么从 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 倍)。此外,与单个语句的亚毫秒操作相比,消息传递通常很慢。代码有问题还是应该这么慢?
解决方案
推荐阅读
- c# - 索引超出数组范围
- ethereum - 使用 web3.py 调用自定义以太坊回退函数
- java - 如何在spring redis实体中使用复合键作为id相当于@embedded id
- python - 如何从另一个列表中获取列表中某些单词的匹配项?
- wordpress - 站点地图未重定向到 HTTPS
- timezone - Swift 4 检查 DST 是否适用于给定时区?
- java - 片段中的捆绑为空
- image - chrome的“另存为图像”如何在内部工作?
- node.js - Busboy 在 Firebase 的 uploadImage 函数中需要它时似乎导致内部服务器错误
- javascript - Laravel:Stripe 集成不会出现信用卡字段