この記事では、プロセスとスレッドを紹介し、Node.js のスレッドを理解し、ノードが本当にシングルスレッドであるかどうかを確認し、child_process モジュールとクラスター モジュールについてさらに詳しく説明します。スレッドは相互に通信します。
#プロセス
オペレーティング システムにおけるプロセスの説明: プロセスとは、データ内の特定の独立した機能を持つプログラムです。セット上の動的実行プロセスは、オペレーティング システムによるリソース割り当てとスケジューリングの独立したユニットであり、アプリケーション実行のキャリアとなります。
- は、アプリケーションの実行プロセス (動的概念) です。
- は、システムのリソース割り当てとスケジューリングの基本単位です (プロセスは一般に、プログラム、データ収集、プロセス制御ブロックで構成されます)
- 各プロセスには、独自の独立した空間アドレスとデータ スタックがあります (データはプロセス間で共有されず、他の方法で通信できます) ) プロセスには通常、初期状態、実行状態、待機状態、準備完了状態、終了状態の 5 つの状態があります。は、プログラムの実行時です。単一の逐次制御プロセスは、プログラム実行フローの最小単位であり、プロセッサーのスケジューリングとディスパッチの基本単位です。
タスクのスケジューリングと実行の最小単位
プロセス内のコードの単一の実行ルート
-
プロセスとスレッドの違い
- スレッドはプログラム実行の最小単位であり、プロセスはオペレーティング システムによって割り当てられるリソースの最小単位です。プロセスは 1 つまたはより多くのスレッドがあり、スレッドはプロセス内のコードです。異なる実行ルートのプロセスは互いに独立していますが、プログラムのメモリ空間は同じプロセス内のスレッド間で共有されます。スレッド コンテキストの切り替えは、プロセス コンテキストの切り替えより高速です。
#ノード内のプロセス
node はシングルスレッドです。つまり、プロセスは 1 つのスレッド ノードのみを開きます。 [推奨学習: "nodejs チュートリアル
"]
これは本当にシングルスレッドですか?
Node はシングルスレッドですが、その下層はマルチスレッドです。イベント ループでは、libuv ライブラリがイベント キューからタスクを取り出し、それらを別のスレッドに割り当てて処理します。現在、ハードウェア条件は以前ほど後退していませんが、単一スレッドのみを使用して動作すると、リソースが無駄に消費されます。そこで、マルチプロセス処理を実現し、マルチコアCPUの利点を最大限に発揮するために、Nodeはchild_processモジュールとclusterモジュールを提供します。
child_process モジュールは、複数の子プロセスを開始し、さまざまなコマンドを実行したり、子プロセスで node.js モジュール ファイルや実行可能ファイルを実行したりするために使用されます
Cluster モジュール (クラスター モジュール) は、Node.js アプリケーションで複数の子プロセスを開始し、各子プロセスで Node.js アプリケーションのコピーを実行するために使用されます。 #child_process module
child_process.execFile(): child_process.exec() と似ていますが、シェルを通じて実行できないことと、I/O リダイレクトやファイル検索などの動作をサポートしていない点が異なります。
Workers 属性は、すべてのサブプロセスで実行されているワーカー オブジェクトを取得するために使用されます
#セマフォ (ミューテックス、条件変数、読み取り/書き込みロック)
#共有メモリ (匿名、名前付き)
#リモート プロシージャ コール
- プロセス間通信はノードだけでなく他の言語でも発生し、もちろん面接でも必ず聞かれる質問です。 深く相談できる内容が多数!
- プログラミング関連の知識について詳しくは、
プログラミング入門
をご覧ください。 !
以上がNode.js は本当にシングルスレッドですか?プロセス間で通信するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。