マルチスレッドのプログラミング

スレッドプールについて

スレッドは、アプリケーションで多くの処理を一度に実行するための有効なパラダイムを提供します。 実行すべきことがある場合は、その実行のためのスレッドを作成してください。スレッドを使用すると、アプリケーションのロジックを簡略化したり、複数のプロセッサを利用したりすることが可能ですが、作成するスレッドの数が多すぎると、リソースの競合によって全体的なアプリケーション性能の問題が発生することがあります。アプリケーションが、リソースの競合 (たとえば、相互排他ロックの処理) のためにその時間の多くを消費して、有効な作業を実際に実行する時間が少なくなる可能性があります。また、プロセスの作成より少ないとは言え、スレッドの作成も負荷になります。少量の作業を実行するためにスレッドを作成することは無駄です。

スレッドプールは、要求に応じて作業を実行する一連の匿名スレッドを管理します。スレッドは、すぐには終了しません。いずれかのスレッドがタスクを完了すると、そのスレッドはアイドル状態になり、別のタスクにディスパッチされるように準備されます。スレッドの作成と削除のオーバーヘッドは、プール内のアクティブなワークスレッドの数だけの作成と削除に制限されます。アプリケーションにはワークスレッドの数より多くのタスクが存在する場合があり、これが通常の状態です。リソースの競合を軽減することによって、プロセッサの利用率やスループットが改善されます。送信されたタスクは順番に、通常、タスクごとにスレッドを作成することによって実行される場合より高速に処理されます。