タスクスケジューリングについて
コンピュータはCPUという頭脳をフル回転させて多くのタスクを処理しています。
タスク実行中には2つの状態が存在します。
「CPUが処理可能な状態」と「ユーザーの入出力をCPUが待っている状態」です。
ユーザーの入出力を待っている状態のタスクにCPUを割り当ててしまうと、その間CPUが無駄に待ち時間を過ごすことになってしまいます。
CPUの待ち時間を少なくするために、待ち時間のタスクと処理可能なタスクを適切に切り替えることでCPUの待ち時間を減らし、効率的にタスクを処理することができます。
タスク処理の効率化のために、「処理する順番」をあらかじめ決めおいてスケジュール化することをタスクスケジューリングと言います。
代表的な「処理する順番」のパターンが以下3つになります。
- ラウンドロビン方式
- 優先度順方式
- 到着順方式
ラウンドロビン方式とは
ラウンドロビン方式は、複数タスクを一定の時間ごとに順番に切り替えて処理する方式です。
筋トレを例にすると、胸筋、腕、腹筋、背筋を鍛える場合に、胸筋⇒腕⇒腹筋⇒背筋⇒胸筋・・というように、順番にトレーニング部位を1日ずつ切り替えていくようなイメージです。
ある部位が筋肉痛の時間に別の部位のトレーニングしているので、筋肉痛による休息期間を短くし、全身を効率的に鍛えることができます。
ラウンドロビン方式は各タスクがどのような状態(たとえ待ち状態)であれ、定められた時間ごとに全タスクを順番に切り替えて処理を進める方式です。
一定の時間ごとにタスクを切り替えて処理するので、待ち時間が短く全タスクの処理をある程度均一に進めていくことができます。
優先度順方式とは
優先度順方式とは、それぞれのタスクに優先度をつけて、優先度に従ってタスクを処理していく方式です。
筋トレを例にすると、鍛えたい部位の優先度が①胸筋、②腕、③腹筋、④背筋だとすると、胸筋からトレーニングを始め、胸筋が筋肉痛になったら、腕を鍛える、胸筋の筋肉痛が治ったら、腕のトレーニングを中断して再び胸筋を鍛える、といった具合です。
胸筋を鍛え終わるまでは、胸筋を最優先、胸筋が筋肉痛の間だけ腕、胸筋と腕が筋肉痛の間だけ腹筋という感じです。
優先度順方式は、とにかく優先度が高いものが最優先という方式になります。
優先度が高いタスクが処理可能な状態になれば、他のタスクの処理中であっても割り込みで優先度が高いタスクを進めます。
ラウンドロビン方式と同様に待ち時間は少ないですが、優先度の低いタスクが処理されるまでに非常に時間がかかる点がデメリットです。
到着順方式とは
到着順方式とは、到着した順番にタスクを1つずつ処理していく方式です。
筋トレを例にすると、トレーニング器具が届いた順に鍛えるイメージです。ダンベルが一番に届いたら腕が鍛え終わるまでは腕のトレーニングをし続けます。途中、腕の筋肉痛が発生した場合は、筋肉痛が治るまで休みます。(他の部位は鍛えません。)
とにかく腕のトレーニングを先に始めたら腕が鍛え終わるまでは他には一切手を付けません。
到着順方式は、到着した順番にタスクを1つずつ処理していくので、待ち時間が長く発生します。全タスクが完了するまでにはかなり時間がかかります。