androidスレッドプールの仕組み
Android のスレッドプールの仕組みはスレッドを管理・スケジューリングすることで並列にタスクを実行する仕組みです。スレッドプールは主に、スレッドプールマネージャー、作業キュー、スレッドプールのスレッドで構成されています。
スレッドプールマネージャーはスレッドプールの作成、破棄、管理を行います。タスクの種類や優先度によって、タスクをスレッドプールのどのスレッドに割り当てるかを決定します。
ワークキュー:ワーキューとは実行待ちタスクが格納されたバッファで、新しいタスクが投入されると、スレッドプールはタスクをワーキューに追加して、スレッドプール内のスレッドがタスクを取得して実行するのを待ちます。
スレッドプールのスレッド: スレッドプール内のスレッドはワーキングキューからタスクを取得し、タスクの実行を担当します。スレッドプールはタスク数と使用可能なスレッド数に応じて同時に実行するスレッド数を決定します。
スレッドプールのワークフローは次のとおりです。
- スレッドプールを作成し、中核スレッド数、最大スレッド数、アイドルスレッドの生存時間などのスレッドプールパラメータを初期化する。
- スレッドプールにジョブが投入されると、スレッドプールはまずコアスレッドの空きをチェックし、空いていれば、新しいスレッドを作成してジョブを実行します。空いていない場合は、ジョブをワークキューに追加します。
- ワーカーキューが満タンの場合は、スレッドプールのスレッド数が最大スレッド数に達しているか確認します。達していない場合は、新しいスレッドを作成してタスクを実行します。最大スレッド数に達している場合は、スレッドプールの拒否ポリシーに基づいてタスクを処理します。
- スレッドがタスクの実行を完了すると、スレッドプールのスレッド数がコア数を超えており、使用されていない時間が設定された有効時間を超過している場合、スレッドリソース(スレッドの破棄)を解放します。
スレッドプールの活用により、並列実行するタスクの数を効率的に制御することで、システムのパフォーマンスや安定性を向上させられます。