プロセスとスレッドの主な違いは、プロセスは実行中のプログラムであるのに対し、スレッドはプロセス内の小さな実行単位であることです。
プログラムは、あるタスクを実行するための命令の集合体です。
プロセスは実行中のプログラムです。
プログラムではないが、それ以上のものです。
つまり、プログラムは受動的な存在であるのに対して、プロセスは能動的な存在です。
プログラムが実行されると、それはプロセスになる。
一方、スレッドは、プロセスに属する小さな実行単位です。
プロセスは重量級であるが、スレッドは軽量級です。
そのため、1つのプロセスを複数のスレッドに分割して効率化を図る。
プロセスとは?
プロセスとは、実行中のプログラムのことである。
プログラマーがプログラムを書き、それを実行すると、そのプログラムはプロセスになる。
プログラムの命令に従って作業を行う。
プロセスがメモリにロードされると、さらに4つのセグメントに分割される。
スタック、ヒープ、テキスト、データです。
スタックは、関数のパラメータやローカル変数などの一時的なデータを格納する。
ヒープは、実行時にプロセスに対して動的にメモリを割り当てる。
テキストセクションには、プロセッサレジスタの内容やプログラムカウンタの値が格納される。
データセクションには、静的変数とグローバル変数が含まれる。
プロセスはいくつかの状態を経る。
それらは以下の通りです。
図2:プロセスの状態
New – プロセスは新しい状態で作成されます。
レディ – レディ状態では、プロセスはプロセッサに割り当てられ、実行できるようになるのを待ちます。
プロセスは、開始状態の後にこの状態になることができる。
さらに、スケジューラがあるプロセスにCPUを割り当てたとき、すでに別のプロセスが実行されている場合、その実行中のプロセスはレディ状態になります。
実行中 – 実行中の状態では、プロセスはプロセッサに割り当てられ、命令を実行する。
待機 – 待機状態は、プロセスが何らかのイベントの発生を待っていることを反映しています。
たとえば、ファイルが利用可能になるまで待機したり、IOが完了するまで待機したりします。
終了 – 終了状態は、プロセスの実行が終了したことを示します。
これで、メインメモリから削除することができる。
さらに、オペレーティングシステムは、各プロセスのプロセスコントロールブロック(PCB)を維持します。
PCBには、プロセスID(PID)、プログラムカウンタ、CPUレジスタ、CPUスケジューリング情報、メモリ管理情報、IOステータス情報など、プロセスに関する情報が含まれています。
PCBは、プロセスが終了すると削除されます。
スレッドとは
スレッドは実行単位であり、プログラムカウンタ、スタック、レジスタのセットを含んでいます。
軽量なプロセスです。
スレッドはプロセスの外には存在できず、各スレッドはプロセスに属している。
スレッドには、ユーザースレッドとカーネルスレッドの2種類があります。
ユーザスレッドはユーザが管理するスレッドであり、カーネルスレッドはカーネルがサポートし管理するスレッドです。
コンピュータ・システムでは、タスクごとにプロセスを作成すると資源が多く必要になるため、効率的ではありません。
そこで、1つのプロセスを複数のサブプロセスに分割し、各サブプロセスでサブタスクを実行する。
このサブプロセスはプロセス内の1つの単位であり、これをスレッドと呼ぶ。
プロセスを複数のスレッドに分割し、これらのスレッドが並列に実行されることをマルチスレッドと呼びます。
したがって、スレッドは並列処理によってアプリケーションの性能を向上させます。
主に、スレッドはプロセス内での並行性を提供します。
さらに、スレッドはマルチプロセッサ・アーキテクチャにおける利用効率を向上させる。
プロセスとスレッドの関係
- スレッドは軽量なプロセスです。
プロセスとスレッドの違い
定義
プロセスとは、実行中のコンピュータ・プログラムのインスタンスのことです。
スレッドはプロセスの構成要素であり、最小の実行単位です。
タイプ
プロセスはヘビーウェイト、スレッドはライトウェイト。
スイッチング
プロセスの切り替えには、オペレーティングシステムとのやり取りが必要です。
これに対して、スレッドの切り替えでは、オペレーティング・システムとのやりとりは必要ありません。
メモリ容量
各プロセスは独自のメモリー空間を持っています。
プロセスは、他のプロセスとメモリーを共有することはありません。
スレッドは、所属するプロセスのメモリーを使用します。
したがって、スレッドは、同じプロセスの他のスレッドとメモリーを共有します。
リソース要件
プロセスにはより多くのリソースが必要です。
スレッドは最小限の資源しか必要としません。
創作
プロセスを作るのは難しい。
スレッドを作る方が簡単。
通信
プロセス間通信は、各プロセスが異なるメモリアドレスを持っているため、低速です。
逆に、スレッド間通信は、スレッドが所属するプロセスのメモリアドレスを共有するため、高速に通信できる。
依存性
マルチプロセッシング環境では、各プロセスは独立して実行されます。
しかし、あるスレッドは他のスレッドのデータを読んだり、書いたり、変更したりすることができます。
結論
プロセスとスレッドの違いは、プロセスが実行中のプログラムであるのに対し、スレッドはプロセスの中の小さな実行単位であることです。
プロセスの作成は難しいが、スレッドの作成は経済的です。
さらに、プロセスは資源を大量に消費するが、スレッドは最小限の資源しか必要としない。