Javascript 在消息上提示群集工作程序事件
我试图找到一种方法来“允诺”工人的事件回调,以便主控可以:Javascript 在消息上提示群集工作程序事件,javascript,node.js,performance,es6-promise,Javascript,Node.js,Performance,Es6 Promise,我试图找到一种方法来“允诺”工人的事件回调,以便主控可以: 等待所有工人完成CPU密集型任务 然后根据返回的结果进行一些计算 我提出了下面的代码,它工作得很好,但是我对我正在采取的方法没有信心 函数来创建一个承诺,该承诺将消息事件包装到工作进程上: \u waitAsync(工作者){ //用蓝鸟作承诺 返回承诺。承诺((回调)=>{ worker.on('message',callback.bind(未定义,未定义)); })(); } 船长呼叫如下: docpuvetaskasync(){
\u waitAsync(工作者){
//用蓝鸟作承诺
返回承诺。承诺((回调)=>{
worker.on('message',callback.bind(未定义,未定义));
})();
}
船长呼叫如下:
docpuvetaskasync(){
常量承诺=[];
设k=0;
for(cluster.workers中的var wid){
promises.push(this._waitAsync(cluster.workers[wid]).bind(this));
cluster.workers[wid].send(messages[k++]);
}
返回承诺。全部(承诺)。然后(计算);
}
利用Node.js中的多核环境(即将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');
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');
如果
worker
可以在其生命周期内发送多条消息
,那么您将成为孤立事件处理程序,它们将累积。孤立事件处理程序将只是试图解决一个已经解决的承诺,但这并不是一个好的做法,因为事件处理程序可以无限期地构建,并且它可以使您的承诺不会被垃圾收集。@jfriend00谢谢,是的,我的工作人员在其一生中将收到多条消息。如果是这种情况,您认为在\u waitAsync
中分配新事件侦听器之前,每次调用worker.removeAllListeners('message')
都会改进代码吗?一般来说,我不喜欢这种体系结构。承诺与事件侦听器不匹配-在一次性承诺设备和重复事件侦听器之间存在阻抗不匹配。我必须更多地了解您的总体代码,才能知道最好的方法是什么。如果worker
可以在其生命周期内发送多条消息,那么您将成为孤立事件处理程序,它们将不断累积。孤立事件处理程序将只是试图解决一个已经解决的承诺,但这并不是一个好的做法,因为事件处理程序可以无限期地构建,并且它可以使您的承诺不会被垃圾收集。@jfriend00谢谢,是的,我的工作人员在其一生中将收到多条消息。如果是这种情况,您认为在\u waitAsync
中分配新事件侦听器之前,每次调用worker.removeAllListeners('message')
都会改进代码吗?一般来说,我不喜欢这种体系结构。承诺与事件侦听器不匹配-在一次性承诺设备和重复事件侦听器之间存在阻抗不匹配。我必须了解更多的整体代码,才能知道最好的方法是什么。