プロセス、スレッド、タスク、ジョブ周りをかなりざっくりまとめました。
かなり単純化している+深いところまでは理解できていないので、突っ込みどころは色々あるかと思いますが、大枠をつかみたい方のお役に立てるかと思います。
誤りがあれば、どんどんコメントでご指摘いただければと。
プログラムの実行手順
- メモリが、実行するプログラムを読み込む
- CPUが、メモリ情報を読み込んで処理する
- 処理が終わったら、メモリを開放する
メモリは机、CPUは脳に例えられたりします。
必要な処理を一旦メモリに展開して、CPUが処理していくイメージです。
CPUはメモリだけをみていれば良いので作業に集中できます。
プロセスとは
上記の「プログラム実行手順」の1~3のまとまりをプロセスと呼びます。
プログラムがメモリにアップされてから開放されるまでの一連の処理のことです。
スレッドとは
プロセスが「メモリ→CPU」で処理される中で、新しいプロセスが作られることがあリます。
この「プロセスの処理の中で作られたプロセス」=「子プロセス」=「スレッド」です。
スレッドもプロセスの一種です。
タスクとジョブ
ざっくり言うと、「プロセスやスレッドのこと」です。
厳密な定義はシステムやアプリ、チームによって変わるので、深く考えない方が良いみたいです。
タスク、ジョブの定義の例
- 1プロセス
- プロセスの集合体
- 1スレッド
- スレッドの集合体
- プロセスやスレッド内の特定の処理
その他
マルチプロセスとは
同じ資源(ファイル、アプリなど)を使って複数のプロセスをメモリに展開して処理すること。
例えばテキストエディタはマルチプロセスです。
複数のタブを同時に開くことができ、それぞれのタブ内での操作は互いに干渉しません。
共有メモリとは
各プロセスやスレッドは独立していますが、共有メモリと言うメモリ領域を活用することで、プロセス間でデータの共有、受け渡しが可能です。
ゾンビプロセスとは
親プロセスの後片付けを待っている状態の子プロセスのことです。
親プロセスが子プロセスの終了ステータスをチェックしない(waitしない)プログラムを書いてしまった時に発生します。
ゾンビプロセスはメモリ領域を占領し続けます。
メモリ領域には上限があるので、ゾンビプロセスが溜まっていくとパフォーマンスが悪化していきます。
親プロセスをkillすることで、ゾンビプロセスを退治することができます。