我必须多次进行某个计算。我想将它拆分为多个核心,所以我想使用 child_process.fork(),然后将工作的一部分传递给每个孩子。
这工作正常,除了我的主要进程(执行 fork() 的那个)在 fork()ing 之后继续运行,并且在孩子们完成工作时已经终止。
我真正想做的是等待孩子们完成后再继续执行。
我在 Node.js 中找不到任何好的方法来做到这一点。有什么建议吗?
我必须多次进行某个计算。我想将它拆分为多个核心,所以我想使用 child_process.fork(),然后将工作的一部分传递给每个孩子。
这工作正常,除了我的主要进程(执行 fork() 的那个)在 fork()ing 之后继续运行,并且在孩子们完成工作时已经终止。
我真正想做的是等待孩子们完成后再继续执行。
我在 Node.js 中找不到任何好的方法来做到这一点。有什么建议吗?
如果您通过 生成一个新的V8进程.fork()
,它会返回一个child
实现通信层的新对象。例如
var cp = require( 'child_process' ),
proc = cp.fork( '/myfile.js' );
proc.on('message', function( msg ) {
// continue whatever you want here
});
/myfile.js
当您完成工作时,您只需在您内部发送一个事件
process.send({ custom: 'message' });
请注意,此方法确实会生成一个新的 V8 实例,它会占用大量内存。所以你应该非常周到地使用它。也许您甚至不需要那样做,也许有一个更“类似节点”的解决方案(process.nextTick
用于计算大量数据)。