🔖
自作Http Client: `TaskRunner`
TaskRunner
- タスクのスケジューリング
- タスクは
TaskQueue
にスケジュール - 各
TaskQueue
は、実行を待機しているタスクのリスト(futureTasks
)を持つ - タスクは、即時実行または特定の遅延後に実行されるようにスケジュールされる
- タスクは
- タスクの選択
-
TaskRunner
は、実行可能なタスクをreadyQueuesから選択 - タスクが即時実行可能であれば、それを選択
- 複数のタスクが実行可能な場合は、追加のスレッドが起動されることがある
-
- タスクの実行
- 選択されたタスクは
runTask
メソッドによって実行される - タスクは、指定された処理を実行し、必要に応じて次の実行時刻を計算する
- 選択されたタスクは
- タスクの完了と再スケジューリング
- タスクが完了すると、
TaskQueue
のactiveTask
から削除され、必要に応じて再スケジュールされる
再スケジュールされたタスクは、再びfutureTasks
に追加されます。
- タスクが完了すると、
- コーディネータースレッドの役割
- コーディネータースレッドは、awaitTaskToRunメソッドを通じて、次に実行すべきタスクを決定する
- このスレッドは、タスクが実行可能になるまで効率的に待機し、必要に応じて他のスレッドを起動する
- リソースの管理
-
TaskRunner
は、使用中のリソース(スレッド数など)を監視し、必要に応じて調整する - タスクの負荷に応じてスレッドを追加または削減し、効率的な処理を保証する
-
- エラー処理
- タスクの実行中にエラーが発生した場合、
TaskRunner
は追加のスレッドを起動して処理を継続し、システムの安定性を保る
- タスクの実行中にエラーが発生した場合、
設計思想
並行性と効率
- 複数のタスクを効率的に並行して実行することを目指している
- これにより、アプリケーションのパフォーマンスが向上し、リソースの使用が最適化される
タスクキューの分離
- 個別のTaskQueueを使用することで、異なるタスクのグループを分離し、管理しやすくしている
- これにより、タスクの優先順位付けや特定のタスクグループに対する操作が容易になる
柔軟なスケジューリング
- タスクは遅延を持ってスケジュールされることができ、これにより、タスクの実行タイミングを細かく制御できる
リソースの適応的管理
- TaskRunnerは必要に応じてスレッドを追加または削減することで、リソースを適応的に管理
- これにより、リソースの無駄遣いを防ぎつつ、必要な処理能力を提供する
エラー処理と回復
- タスクの実行中にエラーが発生した場合、TaskRunnerは追加のスレッドを起動して処理を継続し、システムの安定性を保つ
Discussion