ノードは、シングル スレッドの非同期ノンブロッキング モードを使用して、シングル スレッドで実行されます。ただし、厳密に言えば、ノード内には複数のスレッドがあります。シングル スレッドとは、ノード内に JS エンジンが 1 つだけあることを意味します。メインスレッドで実行され、その他の非同期操作も独立したスレッドで実行されますが、ノードはデフォルトでシングルスレッドであり、「node.js」はマルチコアリソースを利用できません。
このチュートリアルの動作環境: Windows10 システム、nodejs バージョン 12.19.0、Dell G3 コンピューター。
ノードは、単一スレッドの非同期ノンブロッキング モードを使用して、単一のスレッドで実行されます。
ノードというと、シングルスレッド、非同期 IO、イベント駆動などの言葉がすぐに思い浮かびます。最初に明確にする必要があるのは、ノードが本当にシングルスレッドであるかどうかです。シングルスレッドの場合、非同期 IO とスケジュールされたイベント (setTimeout、setInterval など) がどこで実行されるかです。
実際、厳密に言えば、ノードはシングルスレッドではありません。ノードには、次のようなさまざまな種類のスレッドがあります。
js エンジン実行スレッド
タイマー スレッド (setTimeout、setInterval)
非同期 http スレッド (ajax)
通常シングル スレッドと呼ばれるものは、メイン スレッドで実行されるノード内に js エンジンが 1 つだけあることを意味します。他の非同期 IO およびイベント駆動関連のスレッドは、libuv を使用して内部スレッド プールとスレッド スケジューリングを実装します。 libv にはイベント ループがあり、イベント ループを切り替えることでマルチスレッドと同様の効果を得ることができます。簡単に言えば、イベント ループは実行スタックとイベント キューを維持し、現在の実行スタックで非同期 IO 関数とタイマー関数が見つかった場合、これらの非同期コールバック関数はイベント キューに入れられます。現在の実行スタックの実行が完了すると、イベント キュー内の非同期コールバック関数がイベント キューから特定の順序で実行されます。
上の図では、実行スタックからイベント キューに至るまで、最後にコールバック関数がイベント キュー内で特定の順序で実行されるまでのプロセス全体が 1 つのプロセスです。イベントループの簡易版。また、コールバック関数が実行されると実行スタックも生成されますが、コールバック関数内に非同期関数が入れ子になっている場合があります。
つまり、ノード内の単一スレッドは、js エンジンが唯一のメインスレッドでのみ実行されることを意味します。他の非同期操作にも、実行する独立したスレッドがあります。libv のイベント ループを通じて、同様のマルチスレッドが実装されます。 . スレッド コンテキストの切り替えとスレッド プールのスケジューリング。スレッドは最小のプロセスであるため、ノードも単一のプロセスです。これは、ノードがシングルスレッドかつシングルプロセスである理由を説明します。
推奨される学習: 「nodejs ビデオ チュートリアル 」
以上がノードはすべてシングルスレッドで実行されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。