从Node.js中的主事件循环中卸载大量计算

对于一些用户请求,我需要做一些大量的计算(大约需要100ms的时间)。 当然,我不想在节点的主事件循环中执行这些操作,以防止其他请求服务。

最显而易见的,但绝对不是解决这个问题最简洁的方法是将计算卸载到另一个程序,并asynchronous等待结果。

有没有办法做到这一点,而不离开节点进程(并实现进程间通信)? 比如像这样的东西:

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模块,这个模块似乎正是为我的目标而devise的。 它产生subprocess,并与IPC进行通信(没有套接字浪费)。

JavaScript语言不支持线程,node.js也不提供任何接口,因此您需要依赖库来提供线程function。 请参阅节点光纤和节点线程可用的解决scheme。

如果您正在寻找一种在node.js中使IPC更简单的方法,那么请考虑使用zeromq库 ( node.js绑定 )。 这个有点相关的答案也可能是有用的。