У меня в настоящее время есть код 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
Это время отправки сообщения от рабочего к мастеру очень медленное по сравнению с сообщением от мастераработнику (примерно в 4 раза медленнее в этой точке данных).Кроме того, обмен сообщениями в целом медленен по сравнению с операциями с точностью до миллисекунды для отдельных операторов.Код проблематичен или медленный?