我正试图找到一种方法来“宣传”工人的事件回调,以便主人可以:
我想出了以下代码,这很好用,但我对我采取的方法没有信心。
创建一个将消息事件包装在worker上的promise的函数:
_waitAsync(worker) {
// using bluebird for Promise
return Promise.promisify((callback) => {
worker.on('message', callback.bind(undefined, undefined));
})();
}
主要电话如下:
doCPUIntensiveTaskAsync(){
const promises = [];
let k = 0;
for (var wid in cluster.workers) {
promises.push(this._waitAsync(cluster.workers[wid]).bind(this));
cluster.workers[wid].send(messages[k++]);
}
return Promise.all(promises).then(calulcate);
}
在Node.js中,有哪些推荐/更好的方法可以利用多核环境(即将CPU密集型任务卸载到不同的线程/进程)?
答案 0 :(得分:0)
每个“ CPU密集型任务”启动工作程序,然后让它们退出。不要重复使用工作程序,请重新启动它们以执行下一个任务。
简化工作人员退出的方法:
import * as Q from 'q';
let worker = cluster.fork();
let workerExit = Q.denodeify(w.on.bind(w, 'exit'));
await workerExit();// here can be workerExit().then ... instead of await
console.log('child exited');