2

重複の可能性:
node.jsでの「スレッドの生成」のような動作

大規模な操作が完了するのを待たずにコードを続行するにはどうすればよいですか?

var foo = function()
{
    var i = 1000000000;
    while (i > 0)
    {
        i--;
    }
};
console.log("start");
foo();
console.log("end");

編集 これはWeb開発用ではありません。node.jsを使用しています

4

1 に答える 1

4

で、これnode.jsに使用できますprocess.nextTick()。イベントループの次のパスまで、長時間実行されるタスクの実行を延期します。

var foo = function()
{
    var i = 1000000000;
    while (i > 0)
    {
        i--;
    }
};
console.log("start");
process.nextTick(foo());
console.log("end");

これにより、このリクエストをすぐに返すことができますが、最終的に実行されるときにスレッドをブロックすることに注意してください。Node.jsは、長時間実行されるCPUを集中的に使用するタスクを対象としていません。多くの軽量接続を処理するために、最適化されています。

ノードでCPUを集中的に使用する必要がある場合kueは、2番目のnode.jsプロセスが新しいジョブをリッスンして実行できるキューにジョブを配置するジョブキュー(または他のpub / sub実装など)を確認する必要があります。彼らが入ってくると。

これにより、メインノードプロセスが新しいリクエストをすばやく処理できるようになり、いくつかのバックグラウンドノードプロセスがこれらの長時間実行されるジョブをすべて処理できるようになります。

于 2012-10-07T02:31:56.333 に答える