🔖

自作Http Client: `TaskRunner`

2023/12/18に公開

TaskRunner

  1. タスクのスケジューリング
    • タスクはTaskQueueにスケジュール
    • TaskQueueは、実行を待機しているタスクのリスト(futureTasks)を持つ
    • タスクは、即時実行または特定の遅延後に実行されるようにスケジュールされる
  2. タスクの選択
    • TaskRunnerは、実行可能なタスクをreadyQueuesから選択
    • タスクが即時実行可能であれば、それを選択
    • 複数のタスクが実行可能な場合は、追加のスレッドが起動されることがある
  3. タスクの実行
    • 選択されたタスクはrunTaskメソッドによって実行される
    • タスクは、指定された処理を実行し、必要に応じて次の実行時刻を計算する
  4. タスクの完了と再スケジューリング
    • タスクが完了すると、TaskQueueactiveTaskから削除され、必要に応じて再スケジュールされる
      再スケジュールされたタスクは、再びfutureTasksに追加されます。
  5. コーディネータースレッドの役割
    • コーディネータースレッドは、awaitTaskToRunメソッドを通じて、次に実行すべきタスクを決定する
    • このスレッドは、タスクが実行可能になるまで効率的に待機し、必要に応じて他のスレッドを起動する
  6. リソースの管理
    • TaskRunnerは、使用中のリソース(スレッド数など)を監視し、必要に応じて調整する
    • タスクの負荷に応じてスレッドを追加または削減し、効率的な処理を保証する
  7. エラー処理
    • タスクの実行中にエラーが発生した場合、TaskRunnerは追加のスレッドを起動して処理を継続し、システムの安定性を保る

設計思想

並行性と効率

  • 複数のタスクを効率的に並行して実行することを目指している
  • これにより、アプリケーションのパフォーマンスが向上し、リソースの使用が最適化される

タスクキューの分離

  • 個別のTaskQueueを使用することで、異なるタスクのグループを分離し、管理しやすくしている
  • これにより、タスクの優先順位付けや特定のタスクグループに対する操作が容易になる

柔軟なスケジューリング

  • タスクは遅延を持ってスケジュールされることができ、これにより、タスクの実行タイミングを細かく制御できる

リソースの適応的管理

  • TaskRunnerは必要に応じてスレッドを追加または削減することで、リソースを適応的に管理
  • これにより、リソースの無駄遣いを防ぎつつ、必要な処理能力を提供する

エラー処理と回復

  • タスクの実行中にエラーが発生した場合、TaskRunnerは追加のスレッドを起動して処理を継続し、システムの安定性を保つ

Discussion