プロセスとスレッドを区別するもう1つの重要な点は、プロセスは互いに分離されているのに対して、スレッドは互いにメモリやリソースを共有しているということです。
比較表
比較基準 | プロセス | 糸 |
---|---|---|
基本 | 実行中のプログラム | 軽量プロセスまたはその一部。 |
メモリ共有 | 完全に隔離され、メモリを共有しません。 | 互いにメモリを共有します。 |
リソース消費 | もっと | もっと少なく |
効率 | コミュニケーションの文脈におけるプロセスと比較して効率が悪い。 | コミュニケーションの文脈で効率を高めます。 |
作成に必要な時間 | もっと | もっと少なく |
コンテキスト切り替え時間 | 時間がかかります。 | 時間がかかりません。 |
不確実な終了 | プロセスの損失につながります。 | スレッドを再利用できます。 |
終了までに要する時間 | もっと | もっと少なく |
プロセスの定義
プロセスはプログラムの実行であり、プログラムで指定された関連するアクションを実行するか、またはプログラムが実行される実行単位です。 オペレーティングシステムは、CPUを使用するためのプロセスを作成、スケジュール設定、および終了します。 メインプロセスによって作成された他のプロセスは、子プロセスと呼ばれます。
プロセスID、優先度、状態、PWS、コンテンツCPUレジスタなど、プロセスに関する重要な情報がすべて含まれているPCB(Process Control Block)を使用してプロセス操作を制御できます。 。
PCBも、スケジューリング、ディスパッチ、コンテキスト保存の3種類の機能を使用するカーネルベースのデータ構造です。
- スケジューリング - プロセスの順序を簡単に言うと、CPUで最初に実行するプロセスを選択する方法です。
- ディスパッチ - プロセスを実行するための環境を設定します。
- コンテキスト保存 - この機能は、プロセスが再開またはブロックされたときのプロセスに関する情報を保存します。
準備完了、実行中、ブロック中、終了など、プロセスライフサイクルに含まれる特定の状態があります。 プロセス状態は、プロセスアクティビティを一瞬で追跡するために使用されます。
プログラマの観点からは、プロセスはプログラムの同時実行を実現するための媒体です。 並行プログラムの主プロセスは子プロセスを作成します。 メインプロセスと子プロセスは、共通の目標を達成するためにそれぞれ相互作用する必要があります。
プロセスのインターリーブ操作は、あるプロセス内の入出力操作が別のプロセス内の計算アクティビティと重なるときに計算速度を向上させる。
プロセスの特性
- 各プロセスの作成には、各プロセスのシステムコールが別々に含まれています。
- プロセスは独立した実行エンティティであり、データや情報を共有しません。
- プロセスは通信にIPC(プロセス間通信)メカニズムを使用しているため、システムコール数が大幅に増加します。
- プロセス管理はより多くのシステムコールを消費します。
- 各プロセスには、独自のスタックとヒープメモリ、命令、データ、およびメモリマップがあります。
スレッドの定義
スレッドは、タスクを実行するためにプロセスリソースを使用するプログラム実行です。 単一プログラム内のすべてのスレッドは、論理的にプロセス内に含まれています。 カーネルは、各スレッドにスタックとスレッド制御ブロック(TCB)を割り当てます。 オペレーティングシステムは、同じプロセスのスレッド間の切り替え時に、スタックポインタとCPUの状態のみを保存します。
スレッドは3つの異なる方法で実装されています。 これらは、カーネルレベルのスレッド、ユーザーレベルのスレッド、ハイブリッドスレッドです。 スレッドは、実行中、準備完了、ブロックの3つの状態を持つことができます。 それはスイッチングオーバーヘッドを減らすリソース割り当てと通信状態ではなく計算状態を含むだけです。 並行性(並列処理)が向上するため、速度も上がります。
マルチスレッドにはデメリットもあります。マルチスレッドは複雑さを生みませんが、それらの間の相互作用はそうします。
複数のスレッドがアクティブである場合、スレッドは優先順位プロパティーを持っていなければなりません。 同じプロセス内の他のアクティブなスレッドに関連して実行にかかる時間は、スレッドの優先順位によって指定されます。
スレッドのプロパティ
- 1つのシステムコールだけが複数のスレッドを作成できます(軽量プロセス)。
- スレッドはデータと情報を共有します。
- スレッドは命令、グローバル、ヒープ領域を共有しますが、独自のスタックとレジスタを持ちます。
- 共有メモリを使用してスレッド間の通信を実現できるため、スレッド管理はシステムコールをまったくまたはほとんど消費しません。
- プロセスの分離特性は、リソース消費の観点からそのオーバーヘッドを増加させます。
プロセスとスレッドの主な違い
- プログラムのすべてのスレッドは、プロセス内に論理的に含まれています。
- プロセスは重いですが、スレッドは軽いです。
- プログラムは独立した実行単位ですが、スレッドは独立しておらずメモリを共有します。
- スレッドは個々の存在を持つことはできません。 プロセスに添付されています。 一方、プロセスは個別に存在することができます。
- スレッドの満了時には、すべてのスレッドが独自のスタックを持っているため、その関連スタックを回復することができます。 対照的に、プロセスが停止すると、そのプロセスも含めてすべてのスレッドが停止します。
結論
プロセスは、並行して順次にプログラムを実行するために使用されます。 スレッドは、多くのスレッドが同じプロセスの環境を使用するときにプロセスの環境を使用するプログラム実行単位ですが、コード、データ、およびリソースを共有する必要があります。 オペレーティングシステムはこの事実を利用してオーバーヘッドを削減し、計算を改善します。