あなたが何を必要としているのか完全にはわかりませんが、あなたが探しているのは同時関数呼び出しを作成することだと思います。つまり、おそらく計算集約型のコードを実行する必要があり、あなたはそれを望んでいませんこの計算の実行中に他のコードの実行をブロックします。
Node.jsは通常、シングルスレッド プロセスで使用されます。つまり、特定の時間に実行できるコードは 1 つだけですが、実行する方法はいくつかあります。
@TJ Crowder の回答で述べられているように、それを行う 1 つの方法は、関数呼び出しをprocess.nextTickでキューに入れ、イベントループの次のサイクルで実行されるようにすることです。これは、集中的な計算を反復に分割し、各反復が最後のイベント ループ サイクルの後の次のイベント ループ サイクルで実行するためにキューに入れられるのに役立ちます。これは場合によっては役立ちますが、計算を相互に非同期で実行される反復に分割できるとは限りません。Javascript がどのように非同期で実行されるかについて、より詳細な説明を探している場合は、この本を読むことをお勧めします。
Node.jsである種の並行性を実現するには、(私が知っている) 他に少なくとも 2 つの方法があります- ワーカー/スレッドと子プロセスです。要するに、子プロセスは、メイン アプリケーションによって実行されるもう 1 つの Node.js プロセスです。この方法を希望する場合は、 Node.jsのネイティブ *child_process* モジュールを使用して、子プロセスを実行および管理できます。詳細については、公式ドキュメントを参照してください。
3 つ目の方法は、ブラウザーで Web ワーカーを使用する方法と非常によく似た方法でワーカーを使用することです。ワーカーは、メイン アプリケーションとは異なる OS スレッドで実行されるコードのスニペットです。私には、これが並行性を実現する最も簡単な方法のように思えますが、これは最も堅牢な方法ではなく、子プロセスを作成する方が優れていると主張する人もいます。
Workers がMDNでどのように機能するかについての非常に良い説明があります。Node.jsでワーカーを使用するには、 webworker-threadsなどの外部モジュールが必要です。
ドキュメントのスニペットを使用して、サンプルから作成されたコード サンプルを次に示します。
var Worker = require('webworker-threads').Worker;
var worker = new Worker(function(){
onmessage = function(event) {
result = sum(event.data.a, event.data.b);
result = sum(result, event.data.c);
result = sum(result, event.data.d);
result = sum(result, event.data.e);
result = sum(result, event.data.f);
postMessage(result);
self.close();
};
});
worker.onmessage = function(event) {
console.log("The result is: " + event.data);
};
worker.postMessage({a: 1, b: 2, c: 3, d: 4, e: 5, f: 6});
// Do some other stuff that will happen while your Worker runs...
そうは言っても、ほとんどの人はNode.jsで同時コードを実行することを避けようとします。Javascript の非同期性により、単純で簡潔なバックエンド コードを簡単に記述できます。通常は、絶対に必要でない限り、アプリケーションに同時実行性を導入しようとしないことで、そのように保ちたいと思うでしょう。