[英]Off-load heavy computations from main event loop in Node.js
对于某些用户请求,我需要进行一些繁重的计算(大约需要100ms的时间); 当然,我不想在节点的主事件循环中执行这些操作,因此它会阻止其他请求的服务。
解决此问题最明显但绝对不是最干净的方法是将计算卸载到另一个程序并异步等待结果。
没有离开节点进程(并实现进程间通信)有没有办法做到这一点? 像这样的事情:
var compute = function (input) {
var i,
result = input;
for (i = 0; i < 1000000; i++) {
result = md5(result);
}
}
var controller = function (req, res) {
offload(compute, req.params.input, function(result) {
res.send(result);
});
}
我发现了一个compute-cluster
模块,它似乎完全符合我的目标。 它产生子进程,并且通过IPC进行通信(没有浪费套接字)。
JavaScript语言不支持线程和node.js也不提供任何接口,因此您需要依赖库来提供线程功能。 有关可能的解决方案,请参阅node-fibers和node-threads-a-go-go库。
如果您正在寻找一种在node.js中使IPC更容易一些的方法,那么请考虑使用zeromq库 ( node.js绑定 )。 这个有点相关的答案也可能有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.