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