1. ホーム
  2. .net

[解決済み] スレッドとスレッドプール

2022-05-30 10:39:18

質問

新しいスレッドを使用することと、スレッドプールからスレッドを使用することの違いは何ですか? また、なぜ明示的に作成したスレッドではなく、プールからスレッドを使用することを考慮しなければならないのでしょうか。私はここで特に .NET について考えていますが、一般的な例でもかまいません。

どのように解決するのですか?

スレッドプールは、頻繁に行われる比較的短い操作に対して、以下のようなメリットをもたらします。

  • 新しいスレッドを作成する代わりに、既に作成されたスレッドを再利用する (高価な処理)
  • 新しいワーク アイテムへの要求が殺到した場合にスレッドの作成速度を遅くする (これは .NET 3.5 でのみ行われると思います)
    • 100 個のスレッドプール タスクをキューに入れた場合、これらの要求に対応するためにすでに作成されているスレッド数 (たとえば 10 個) だけ使用します。スレッドプールは頻繁にチェックを行い (3.5 SP1 では 500 ミリ秒ごとだと思います)、キューに入ったタスクがある場合は、新しいスレッドを 1 つ作成します。タスクが迅速であれば、新しいスレッドの数は少なく、短いタスクのために 10 ほどのスレッドを再利用するほうが、前もって 100 のスレッドを作成するよりも高速になります。

    • 作業負荷が常に大量のスレッドプール要求を持っている場合、スレッドプールは、要求を処理するために利用できるより多くのスレッドが存在するように、上記のプロセスによってプールに多くのスレッドを作成することによって作業負荷に合わせて調整されます。

    • チェック ここで スレッドプールがどのように機能するかについてのより詳細な情報については

新しいスレッドを自分で作成することは、ジョブが比較的長く実行される場合により適切でしょう (おそらく 1、2 秒程度ですが、特定の状況に依存します)。

スレッドプール スレッドはバックグラウンド スレッドであり、メイン スレッドが終了したときに停止します。手動で作成されたスレッドは、デフォルトではフォアグラウンド (メイン スレッドが終了した後も実行し続ける) ですが、それらに Start を呼び出す前にバックグラウンドに設定することが可能です。