コンピュータの世界でよく出てくる言葉に「タスク、ジョブ、プロセス、スレッド」があります。
なんとなく「コンピュータの中で処理している単位かなー」、って思いますが、「違いは何?」って聞かれると意外と答えにくいですよね。
そんなことで、今回は「タスク、ジョブ、プロセス、スレッド」の違いに関して解説します!
ジョブとタスク
先ずはジョブとタスクです。
英語だと「ジョブ(job)=仕事」、「タスク(task)=作業」ですね。
ということで、仕事(ジョブ)という大きな枠の中にいくつかの作業(タスク)がある感じになります。
コンピュータの世界でも同じことになります。
利用者がコンピュータに対してジョブを与えて、コンピュータがタスクを処理していきます。
もう少し詳しくすると、OSがジョブ管理という仕組みでジョブを処理して、OSがCPU(演算部)にタスクを渡します。
ポイント
- ジョブ:利用者からの命令。OSがジョブ管理で処理する
- タスク:OSがCPU(ハードウェア)に指示する命令。OSのタスク管理で処理する
図で表現すると以下のイメージになりますね。
プロセスとスレッド
続いてプロセスとスレッドです。
実はタスクとプロセスはほば同じ意味で使われることがあったり、解釈が人によって微妙に違うことがあります。
私の中でプロセスとは「タスクがCPUの上で実行状態になっているもの」と定義しています。
なので、タスクの数はプロセスの数は同じですね。
そして、スレッドはCPU上で動いているプロセスを「コア単位(最小単位)に分解したもの」としてます。
CPUはマルチコアという種類がありますが、これはコアの数だけ同時に処理ができるようにして、処理速度を上げています。
ポイント
- プロセス:タスクがCPUの上で実行中になっている状態
- スレッド:プロセスをコア単位(最小単位)に分解したもの
シングルタスクとマルチタスク
OSのタスク管理によってジョブからできた複数のタスクを処理していますが、この処理方法には大きく「シングルタスク」と「マルチタスク」があります。
何が違うかは、CPUでタスクを処理するときに一つずつ順番に処理するのがシングルタスク、複数のタスクを頻繁に切り替えて処理するのがマルチタスクです。
一つのCPUのコアで処理すると考えた場合、一つのタスクが終わるまで他のタスクは処理ができません。あるタスクの処理時間がとても長いと他のタスクがずっと待つ感じになります。
それよりも、「みんなちょっとでも処理を進めたいよね、早く終わるタスクなら、早く終わらせちゃいたいよね」ということで、マルチタスクというものがあります。
マルチタスクはOSがCPUを操作することで、タスクの切り替えを実施しています。
「料理をする時にいろんなおかずを同時に作りますが、洗ったり、切ったり、茹でたりすることがマルチタスク」ですね。
下の図のようにマルチタスクによって「タスクC」はシングルより早く終わりますが、「タスクA」は逆に遅くなってしまったりします。
また、マルチタスクは切り替え処理が必要なので、そこが性能に影響することもありますので、どちらが絶対良いというわけではないので、使い分けが重要になりますね。
もちろん、CPUのコア数が多ければ、その分だけ同時に処理ができるので、マルチタスクのメリットは出ます。
まとめ
今回はコンピュータにおける「タスク、ジョブ、プロセス、スレッド」の違いに関して解説してきました。
ジョブ、タスク、プロセス、スレッドのまとめ
- ジョブは利用者からの命令で、ジョブをタスクに分割してOSがCPU(ハードウェア)に指示する
- OSのジョブ管理やタスク管理で管理・処理されている
- プロセスはタスクがCPUの上で実行中になっている状態で、コア単位(最小単位)に分解したものがスレッド
- シングルタスクとマルチタスクは使い分けが重要
タスクやプロセスは同じような意味として使ってる言葉ですが、厳密には違うので、間違って使わないよう気を付けましょう!
ジョブとタスク、シングルタスク、マルチタスクの考え方は仕事や日常生活においても使ったりしますね。
私も家で炊事、掃除、洗濯するときはかなりマルチタスクです(笑)
以上です!