Node.js は本当にシングルスレッドですか?プロセス間で通信するにはどうすればよいでしょうか?

青灯夜游
リリース: 2021-08-02 18:44:08
転載
2452 人が閲覧しました

この記事では、プロセスとスレッドを紹介し、Node.js のスレッドを理解し、ノードが本当にシングルスレッドであるかどうかを確認し、child_process モジュールとクラスター モジュールについてさらに詳しく説明します。スレッドは相互に通信します。

Node.js は本当にシングルスレッドですか?プロセス間で通信するにはどうすればよいでしょうか?

#プロセス

オペレーティング システムにおけるプロセスの説明: プロセスとは、データ内の特定の独立した機能を持つプログラムです。セット上の動的実行プロセスは、オペレーティング システムによるリソース割り当てとスケジューリングの独立したユニットであり、アプリケーション実行のキャリアとなります。

  • は、アプリケーションの実行プロセス (動的概念) です。

  • は、システムのリソース割り当てとスケジューリングの基本単位です (プロセスは一般に、プログラム、データ収集、プロセス制御ブロックで構成されます)

  • 各プロセスには、独自の独立した空間アドレスとデータ スタックがあります (データはプロセス間で共有されず、他の方法で通信できます) ) プロセスには通常、初期状態、実行状態、待機状態、準備完了状態、終了状態の 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.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 サイトの他の関連記事を参照してください。

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