ホームページ > ウェブフロントエンド > フロントエンドQ&A > ノードはすべてシングルスレッドで実行されますか?

ノードはすべてシングルスレッドで実行されますか?

WBOY
リリース: 2022-06-15 16:57:45
オリジナル
2489 人が閲覧しました

ノードは、シングル スレッドの非同期ノンブロッキング モードを使用して、シングル スレッドで実行されます。ただし、厳密に言えば、ノード内には複数のスレッドがあります。シングル スレッドとは、ノード内に 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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート