4

ある計算を何度もしなければなりません。複数のコアに分割したいので、child_process.fork() を使用して、各子に作業のチャンクを渡します。

これは正常に動作しますが、私のメイン プロセス (fork() を実行するプロセス) は fork() の後も続行され、子プロセスが作業を完了するまでに既に終了しています。

私が本当にやりたいことは、実行を続行する前に、子供たちが終了するのを待つことです。

ノードでこれを行う良い方法が見つかりません。何かアドバイス?

4

1 に答える 1

4

を介して新しい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重いデータを計算するために使用します)。

于 2012-10-17T20:20:55.180 に答える