ホームページ >ウェブフロントエンド >フロントエンドQ&A >Nodejsはマルチスレッドですか?
Nodejs はマルチスレッドではなくシングルスレッドです。nodejs はシングルスレッドの非同期ノンブロッキング モードを使用します。JavaScript エンジンのため、ノードはデフォルトでシングルスレッドです。nodejs アプリケーションはマルチスレッドを利用できません-core リソース: イベント駆動型および非同期の「I/O」メソッドを使用して、シングルスレッドの同時実行性の高いランタイム環境を実現できます。
この記事の動作環境: Windows 10 システム、nodejs バージョン 12.19.0、Dell G3 コンピューター。
Node はシングルスレッドであり、シングルスレッドの非同期ノンブロッキング モードを採用しています。
JavaScript エンジンのため、node はデフォルトでシングルスレッドであり、node.js アプリケーションはマルチコア リソースを利用できません。
Node.js は、イベント駆動型の非同期 I/O を使用して、シングルスレッドの同時実行性の高いランタイム環境を実装します。シングルスレッドとは、同時に実行できる処理が 1 つだけであることを意味します。
nodejs は非同期、ノンブロッキングを実装します。
nodejs は実際にはシングルスレッドでの js 実行のみを備えており、I/O は明らかに他のスレッドです。
js 実行スレッドはシングルスレッドです。必要な I/O が libuv に渡される限り、libuv はすぐに戻って他の処理を実行し、指定された時刻に libuv がコールバックします。
具体的には、まずnode-bindings内のjsコードからC/Cコードまでnodejsが呼び出され、C/Cコード内の「リクエストオブジェクト」と呼ばれる内容をカプセル化してlibuvに渡します。 。このリクエスト オブジェクトの一部は、実行する必要がある関数コールバックに似ており、libuv へのコールバックを実行し、実行後にコールバックを実装するだけです。
つまり、非同期 I/O の一般的なプロセスは次のとおりです。
1. I/O 呼び出しの開始
ユーザーは Javascript コードからノード コア モジュールを呼び出し、パラメータとコールバック関数をコア モジュールに渡します
ノード コア モジュールパラメータとコールバック関数はリクエスト オブジェクトにカプセル化されます。
この要求オブジェクトを I/O スレッド プールにプッシュして実行を待機します;
JavaScript の非同期呼び出しが終了し、JavaScript スレッドは後続の操作を実行し続けます。
2. コールバックの実行
I/O 操作が完了すると、JavaScript コールバックの目的を達成するために、リクエスト オブジェクトに以前にカプセル化されたコールバック関数が取得および実行されます。 (ここでのコールバックの詳細については、以下で説明します)
ここから、実際には Node.js の単一スレッドを常に誤解してきたことがわかります。
実際、シングル スレッドは Javascript 実行環境の単一スレッドを指します。Node.js には、JavaScript の実行時に新しいスレッドを作成する機能がありません。最終的な実際の操作は引き続き Libuv とそのイベント ループで実行されます。シングルスレッド言語である Javascript が Node.js で非同期操作を実装できるのはこのためです。両者は衝突しません。
拡張知識:
Node.js マルチスレッドの概要
Node.js はシングルスレッドですが、次のようなことができると言う人もいるかもしれません。タスクの同時実行を実現するには、ループ イベント (イベント ループ) を使用します。その本質を調査すると、NodeJs は実際に 2 つの異なるスレッドを使用します。1 つはループ イベントを処理するためのメイン スレッドで、もう 1 つはワーカー プール内のいくつかの補助スレッドです。これら 2 つのスレッドの主な機能と関係は、図
に示されています。推奨される学習: "nodejs ビデオ チュートリアル "
以上がNodejsはマルチスレッドですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。