スレッドとプロセスとタスク
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/06/16 09:55 UTC 版)
「スレッド (コンピュータ)」の記事における「スレッドとプロセスとタスク」の解説
計算機上で並行計算/並列計算あるいはマルチタスクといった、複数の処理を同時に実行するためには、計算機およびその上で動作するオペレーティングシステム (OS) が、プロセッサ(CPU)時間を個々の処理に対して適切に分配・スケジューリングする機能に対応している必要がある。同時に実行する部分を指定することができる、処理の分割の単位として、スレッドとプロセスがある。 新たなプロセスを動作させるためには、CPUやメモリ空間などを割り当てる必要がある。それぞれのプロセスは、割り当てられた資源内で独立して動く。通例、システム全体の動作の安定性および安全性の観点から、個々のプロセスのアドレス空間は仮想化・分離される。プロセスごとにメモリ空間が独立しているため、あるプロセスから別のプロセスが参照しているメモリに直接アクセスするようなことはできない。しかし、独立したメモリ空間が不必要な場合では、メモリの利用効率が悪くなってしまう。プログラムによっては、処理ごとに別々の空間にあるメモリを利用するのではなく、単一の空間内のメモリを共有しながら複数の処理を行なう「共有メモリ方式」のほうが、ロジックの実装のしやすさやメモリ効率の面で優れている場合がある。これを可能にするのがスレッドである。 マルチタスクOSにおいて、1つのタスクは、1つ以上のプロセスから構成され、1つのプロセスは、1つ以上のスレッドから構成される。集合で表すと、スレッド ∈ プロセス ∈ タスクというようになる。しかし、この関係は環境によって異なる。例えば、リアルタイムOSでは、タスク ≒ スレッド、スレッド ∈ プロセス、である。しかし、タスクとプロセスの間に要素関係はない。 スレッドを使うことで、同一プロセス内の複数スレッドを同一メモリ空間上で実行でき、メモリ消費量などが軽減できるようになっている。しかし、このため、マルチスレッド処理のプログラミングにおいては、同じデータを複数のスレッドが同時に書き換えることによる不整合に注意し、排他制御を行う必要がある。共有ライブラリ使用時には、その共有ライブラリがスレッドセーフ(リエントラント)になっているかどうか気をつけてプログラミングしなければならない。 また、複数のスレッドが協調動作する際、お互いの処理完了を待ち合わせてデッドロック (deadlock) 状態に陥ることのないよう配慮する必要もある。 ある処理を単一のスレッドのみを用いて動作させる環境もしくは手法をシングルスレッドという。対して、複数のスレッドが同時に動作することをマルチスレッドという。プログラム(概ねプロセス)の開始時にはメインとなるスレッドが動作する。必要に応じてその他の処理をするスレッドを作り、実行させることもできる。 基本的なモデルとして、1つのCPUコアがある瞬間に同時に実行しているのは、割り込み処理なども含めて1つのスレッド、1つのプロセス、1つのタスクであるとする。その限界を超えるべく考案された同時マルチスレッディングはあるスレッドの実行時に余ったCPU資源を別のスレッドに割り当てる特殊な例である(21世紀以降はむしろこちらが一般化している)。 「ハードウェアマルチスレッディング」を参照
※この「スレッドとプロセスとタスク」の解説は、「スレッド (コンピュータ)」の解説の一部です。
「スレッドとプロセスとタスク」を含む「スレッド (コンピュータ)」の記事については、「スレッド (コンピュータ)」の概要を参照ください。
- スレッドとプロセスとタスクのページへのリンク