NodeJSのThreading
とそれがどのように機能するかを理解しようとしています。
現在私が理解していること:
クラスター:-
Child_process:
利用可能なさまざまなコアも利用しますが、仮想メモリを作成するため、子プロセスをフォークするために大量のリソースを消費するため、悪いです。
フォークされたプロセスは、イベントを介してマスタースレッドと通信でき、その逆も可能ですが、フォークされたプロセス間には通信がありません。
ワーカースレッド:
bufferArray
を使用して互いに通信できます1)worker threads
がchild process
より優れている理由と、それぞれを使用する必要があるのはなぜですか?
2)4つのコアと、クラスター化/フォークされたnodeJS Webサーバーが4回(各コアに1つのプロセス)ある場合、worker threads
を使用するとどうなりますか(使用可能なコアはありません)。
ワーカースレッドの下のポイントで、子プロセスと性質が同じであると述べました。しかし、実際にはそうではありません。
一方、プロセスには独自のメモリ空間があり、スレッドは共有メモリ空間を使用します。
スレッドはプロセスの一部です。プロセスは複数のスレッドを開始できます。つまり、プロセスの下で開始された複数のスレッドは、そのプロセスに割り当てられたメモリ空間を共有します。
上記のポイントは、スレッドモデルがプロセスよりも優先される理由の最初の質問に答えると思います。
2番目のポイント:プロセッサが一度に4つのスレッドの負荷を処理できるとしましょう。ただし、スレッド数は16です。その後、それらすべてがCPU時間の共有を開始します。
4コアCPUを考えると、スレッドが制限された4つのプロセスがより適切にそれを利用できますが、スレッド数が多い場合、すべてのスレッドがCPU時間の共有を開始します。 (私がすべてのスレッドがCPU時間を共有し始めると言うとき、私はプロセスの優先度と素晴らしさを考慮しておらず、同じマシンで実行されている他のプロセスさえも考慮していません。)
タイムスライシングとCPU負荷分散に関する私のクイック検索:
この記事では、プロセス間の切り替えによって全体的なパフォーマンスがどのように低下するかについても回答しています。
ワーカースレッドは、他のプログラミング言語のスレッドと性質が似ています。
このスレッドを見て、スレッドとプロセスの違いについて全体的に理解することができます。 プロセスとスレッドの違いは何ですか?