web-dev-qa-db-ja.com

Child_processスレッドとWorkerスレッドの違いは何ですか?

NodeJSのThreadingとそれがどのように機能するかを理解しようとしています。

現在私が理解していること:

クラスター:-

  • Child_processの上に構築されていますが、TCPがクラスター間で分散されています。
  • 受信HTTPリクエストの分散/バランスに最適ですが、CPUを集中的に使用するタスクには適していません。
  • CPUで利用可能なコアを利用し、他のコアにnodeJS webserverインスタンスを複製することで機能します。

Child_process:

  • 利用可能なさまざまなコアも利用しますが、仮想メモリを作成するため、子プロセスをフォークするために大量のリソースを消費するため、悪いです。

  • フォークされたプロセスは、イベントを介してマスタースレッドと通信でき、その逆も可能ですが、フォークされたプロセス間には通信がありません。

ワーカースレッド:

  • 子プロセスと同じですが、フォークされたプロセスはbufferArrayを使用して互いに通信できます

1)worker threadschild processより優れている理由と、それぞれを使用する必要があるのはなぜですか?

2)4つのコアと、クラスター化/フォークされたnodeJS Webサーバーが4回(各コアに1つのプロセス)ある場合、worker threadsを使用するとどうなりますか(使用可能なコアはありません)。

10
Abdelfattah

ワーカースレッドの下のポイントで、子プロセスと性質が同じであると述べました。しかし、実際にはそうではありません。

一方、プロセスには独自のメモリ空間があり、スレッドは共有メモリ空間を使用します。

スレッドはプロセスの一部です。プロセスは複数のスレッドを開始できます。つまり、プロセスの下で開始された複数のスレッドは、そのプロセスに割り当てられたメモリ空間を共有します。

上記のポイントは、スレッドモデルがプロセスよりも優先される理由の最初の質問に答えると思います。

2番目のポイント:プロセッサが一度に4つのスレッドの負荷を処理できるとしましょう。ただし、スレッド数は16です。その後、それらすべてがCPU時間の共有を開始します。

4コアCPUを考えると、スレッドが制限された4つのプロセスがより適切にそれを利用できますが、スレッド数が多い場合、すべてのスレッドがCPU時間の共有を開始します。 (私がすべてのスレッドがCPU時間を共有し始めると言うとき、私はプロセスの優先度と素晴らしさを考慮しておらず、同じマシンで実行されている他のプロセスさえも考慮していません。)

タイムスライシングとCPU負荷分散に関する私のクイック検索:

  1. https://en.wikipedia.org/wiki/Time-sharing
  2. https://www.tutorialspoint.com/operating_system/os_process_scheduling_qa2.htm

この記事では、プロセス間の切り替えによって全体的なパフォーマンスがどのように低下​​するかについても回答しています。

ワーカースレッドは、他のプログラミング言語のスレッドと性質が似ています。

このスレッドを見て、スレッドとプロセスの違いについて全体的に理解することができます。 プロセスとスレッドの違いは何ですか?

8
Sudhir Dhumal