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

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









ノンブロッキングおよびイベント駆動に基づいて構築されたノード サービスには、メモリ消費量が少ないという利点があり、大量のネットワーク リクエストの処理に非常に適しています。大量のリクエストを前提として、「メモリ制御」に関する問題を考慮する必要があります。 1. V8 のガベージ コレクション メカニズムとメモリ制限 Js はガベージ コレクション マシンによって制御されます

この記事では、NodeJS V8 エンジンのメモリとガベージ コレクター (GC) について詳しく説明します。

ノード用の Docker イメージの選択は些細なことのように思えるかもしれませんが、イメージのサイズと潜在的な脆弱性は、CI/CD プロセスとセキュリティに大きな影響を与える可能性があります。では、最適な Node.js Docker イメージを選択するにはどうすればよいでしょうか?

ファイル モジュールは、ファイルの読み取り/書き込み/開く/閉じる/削除の追加など、基礎となるファイル操作をカプセル化したものです。ファイル モジュールの最大の特徴は、すべてのメソッドが **同期** と ** の 2 つのバージョンを提供することです。 asynchronous**、sync サフィックスが付いているメソッドはすべて同期メソッドであり、持たないメソッドはすべて異種メソッドです。

Node 19 が正式リリースされましたので、この記事では Node.js 19 の 6 つの主要な機能について詳しく説明します。

Node.js はどのように GC (ガベージ コレクション) を行うのでしょうか?次の記事で詳しく説明します。

イベント ループは Node.js の基本的な部分であり、メイン スレッドがブロックされていないことを確認することで非同期プログラミングが可能になります。イベント ループを理解することは、効率的なアプリケーションを構築するために重要です。次の記事では、Node のイベント ループについて詳しく説明します。お役に立てれば幸いです。

ノードが npm コマンドを使用できない理由は、環境変数が正しく設定されていないためです。解決策は次のとおりです: 1. 「システムのプロパティ」を開きます; 2. 「環境変数」->「システム変数」を見つけて、環境を編集します。変数; 3.nodejs フォルダーの場所を見つけます; 4.「OK」をクリックします。
