ThreadPool は、スレッドを作成して破棄するのではなく、スレッドをアイドル状態に保ちます。
スレッドの作成と破棄のプロセス全体はわかりませんが、スレッドをアイドル状態にするよりもコストがかかるのはなぜですか。
ThreadPool は、スレッドを作成して破棄するのではなく、スレッドをアイドル状態に保ちます。
スレッドの作成と破棄のプロセス全体はわかりませんが、スレッドをアイドル状態にするよりもコストがかかるのはなぜですか。
簡単に言えば、アイドル状態のスレッドは何もしていないからです。仕事ができるのをただ待っているだけです。スレッドの作成には、メモリの割り当て、負荷分散など、舞台裏で行われるあらゆる種類の作業が含まれます。
マネージド スレッドを作成すると、多くのことが起こります。明らかに、スレッドのネイティブ データ構造とマネージド データ構造の両方が作成されます。さらに、マネージド スレッドは 1 MB のスタック スペース全体をコミットし、追加のスレッドごとのデータ構造が割り当てられます。要するに、これは非常に高価な割り当てです。
スレッドを保持して再利用することにより (スレッド プールなどを介して)、このコストは償却されます。そうは言っても、アイドル状態でもリソースを消費するため、過剰な数のスレッドをぶらぶらさせたくはありません。その結果、スレッド プールはアイドル状態のスレッドを定期的に終了して、リソースを再利用します。
アイドルスレッドは何もしないからです。
スレッドを作成すると、一連の作業が実行されます (メモリの割り当て、スレッドの管理に必要なデータ構造の作成など)。そのすべての作業は、スレッドの作業が発生するたびに 1 回実行するのではなく、プールされたスレッドに対して 1 回実行されます。