node.jsの助けが必要です。 私はデータの配列を持っており、(すべてのCPUコアを使用して)そのデータを持つ関数を複数のスレッドで実行する必要があります。 私はいつも私の言語のためにスレッド数のスレッドプールを作成し、いくつかのタスクをプッシュし、終了するまで待って、より多くのタスクをキューに送ります。 しかし、私はnodejsでそれを行う方法を理解できません。node.jsの複数のスレッドでタスクを実行する
PS:私は最新の0.8ブランチを使用しています。
node.jsの助けが必要です。 私はデータの配列を持っており、(すべてのCPUコアを使用して)そのデータを持つ関数を複数のスレッドで実行する必要があります。 私はいつも私の言語のためにスレッド数のスレッドプールを作成し、いくつかのタスクをプッシュし、終了するまで待って、より多くのタスクをキューに送ります。 しかし、私はnodejsでそれを行う方法を理解できません。node.jsの複数のスレッドでタスクを実行する
PS:私は最新の0.8ブランチを使用しています。
Nodejsは単一プロセスで実行するように構築されていますが、spawn他のプロセスでも実行できます。 clusterモジュールは、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
にあるということです。
逆ループは高速です - このような巨大なパフォーマンスの向上のためには、取引の可読性は明らかです。 SO –
IMHOでも、読みやすさには影響しません –
スピードが気になる場合はループ内でクロージャを作成しないでください(多くの場合++の代わりに+をループするよりもはるかに多い) http: //jsperf.com/closure-vs-name-function-in-a-loop/2 他: http://jslinterrors.com/dont-make-functions-within-a-loop –
私はあなたがこれを必要と思う:[クラスタ](http://nodejs.org/api/cluster.html) –
イベントドリブンプログラミングは今私にとって非常に珍しいです..私のタスクで使用する例のいくつかの助けが必要です.. – elgato
Node.jsにはスレッドがないので、従来のUNIXプログラミングの概念(すなわち、フォーク、スポーン、IPC-Inter Process Communication)について考える必要があります。典型的な場合のように独自のペイロードフォーマットなどを定義するのではなく、IPCを素早くNode-likeにするhook.ioというNPMモジュールがあります:https://github.com/hookio/hook.io – d11wtq