在消息上承诺群集工作线程事件
Promisify cluster worker events on message
我正在尝试找到一种方法来"承诺"对工人的事件回调,以便主人可以:
- 等待所有工作线程完成 CPU 密集型任务,
- 然后根据返回的结果进行一些计算。
我想出了以下代码,这工作正常,但是我对我正在采取的方法没有信心。
创建将消息事件包装在工作线程上的承诺的函数:
_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 密集型任务卸载到不同的线程/进程)的推荐/更好方法是什么?
-
每个"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');
相关文章:
- Web 工作线程中的同步 XHR 请求是否仍会锁定浏览器
- 在工作线程中使用 setTimeOut
- 页面工作线程 - destroy() 似乎没有删除窗口对象
- 如何在工作线程中调用 window.external.notify
- 服务工作线程是否可以响应同步 XHR 请求
- 增加服务工作线程的生命周期
- Android Web Console: UncaughtReferenceError: 未定义工作线程
- 节点群集未将任务分派给另一个可用的工作线程
- Web 工作线程/画布的内存泄漏
- 如何通过 webhook 将 json 格式的字符串作为有效负载传递给 iron.io 工作线程
- jQuery Mobile App 的后台工作线程
- 服务工作线程是否可以缓存 POST 请求
- RxJS 和主/工作线程工作流
- 关于 Web 工作线程并行性
- 如何从字符串创建 Web 工作线程
- 如果工作线程发布消息时主线程繁忙,会发生什么情况
- 如何删除有缺陷的服务工作线程,或实现“终止开关”
- 我可以在浏览器ui线程和web工作线程中安全地使用html5中的哪些本地存储
- 当标签关闭时,HTML5 web工作线程会发生什么's正在跑步
- Javascript工作线程选项