スレッドプールの使用方法と使用者:
まず、コンピューターでノードを使用/インストールすると、コンピューター内でノードプロセスと呼ばれるプロセスが起動され、強制終了するまで実行され続けます。そして、この実行中のプロセスは、いわゆるシングルスレッドです。
したがって、シングルスレッドのメカニズムにより、ノードアプリケーションのブロックが容易になりますが、これはNode.jsがテーブルにもたらすユニークな機能の1つです。したがって、ノードアプリケーションを実行すると、単一のスレッドで実行されます。1人または100万人のユーザーが同時にアプリケーションにアクセスしているかどうかは関係ありません。
したがって、ノードアプリケーションを起動すると、nodejsのシングルスレッドで何が起こるかを正確に理解しましょう。最初にプログラムが初期化され、次にすべてのトップレベルコードが実行されます。これは、コールバック関数内にないすべてのコードを意味します(すべてのコールバック関数内のすべてのコードはイベントループで実行されることに注意してください)。
その後、すべてのモジュールコードが実行され、すべてのコールバックが登録されます。最後に、アプリケーションのイベントループが開始されます。
したがって、前に説明したように、すべてのコールバック関数とそれらの関数内のコードはイベントループで実行されます。イベントループでは、負荷はさまざまなフェーズで分散されます。とにかく、ここではイベントループについては説明しません。
スレッドプールをよりよく理解するために、イベントループで、あるコールバック関数内のコードの実行が別のコールバック関数内のコードの実行を完了した後に実行されることを想像してみてください。その後、nodejsシングルスレッドをブロックします。そのため、そこにスレッドプールが入ります。これは、イベントループのように、libuvライブラリによってNode.jsに提供されます。
したがって、スレッドプールはnodejs自体の一部ではありません。これはlibuvによって提供され、重い負荷をlibuvにオフロードします。libuvはそれらのコードを独自のスレッドで実行し、実行後、libuvはイベントループのイベントに結果を返します。
スレッドプールは4つの追加スレッドを提供します。これらはメインの単一スレッドから完全に分離されています。そして実際には、最大128スレッドまで構成できます。
したがって、これらすべてのスレッドが一緒になってスレッドプールを形成しました。そして、イベントループは重いタスクをスレッドプールに自動的にオフロードできます。
楽しい部分は、これらすべてが舞台裏で自動的に行われることです。スレッドプールに何を行うか、何を行わないかを決定するのは私たちの開発者ではありません。
次のようなスレッドプールに行く多くのタスクがあります。
-> All operations dealing with files
->Everyting is related to cryptography, like caching passwords.
->All compression stuff
->DNS lookups