5

node.jsは初心者なので、助けが必要です。データの配列があり、そのデータを使用して複数のスレッドで関数を実行する必要があります(すべてのCPUコアを使用)。私の言語では通常、スレッドの数を使用してスレッドプールを作成し、いくつかのタスクをそれにプッシュし、終了するまで待機し、さらにタスクをキューに送信します。しかし、nodejsでそれを行う方法を理解することはできません。

PS:私は最新の0.8ブランチを使用しています。

4

1 に答える 1

4

Nodejsは単一のプロセスで実行するように構築されていますが、他のプロセスを生成することもできます。クラスタモジュールは、child_processモジュールのforkメソッドを使用しますが、サーバーの接続をプロセス間で分散し、同じポートを共有することを目的としています。

execが必要だと思います。例:

var exec = require('child_process').exec,
child;

var array = ["a", "b", "c", "d", "e"]; // your array of data

var n = array.length; // length
var done = 0; // jobs done
var i = n; // iterator

while(i--) { // reverse while loops are faster
    (function (argument) { // A closure
        child = exec('node otherFunction.js '+argument, // Spawn the process, with an item from your array as an argument.
          function (error, stdout, stderr) {
            if (error === null) {
                done += 1;
                if (done === n) {
                    console.log('Everything is done');
                }
            }
        });
    })(array[i]);
}

上記はもちろん悪いコードであり、テストさえされていませんが、私はそれがうまくいくと思います。あなたがしなければならないのは、配列のアイテムに対して呼び出したい関数を呼び出すotherFunction.jsことだけです。その中には、の引数がありprocess.argvます。

于 2012-08-19T10:36:00.657 に答える