logo

プロセスとスレッド |プロセスとスレッドの違い

「プロセスとスレッドの違い」は、技術面接でよく聞かれる質問の 1 つです。プロセスとスレッドは両方とも相互に関連しており、非常によく似ているため、両方の違いを理解するのに混乱が生じます。プロセスとスレッドは独立した実行シーケンスですが、プロセスが異なるメモリ空間で実行されるのに対し、同じプロセスのスレッドは共有メモリ空間で実行されるという点で両者は区別されます。

このトピックでは、プロセスとスレッドの簡単な紹介と、それらの両方のその他の違いについて説明します。

プロセスと糸

プロセスとは何ですか?

プロセスは、実行中のプログラムのインスタンスです。 プログラムを実行するとき、それは直接実行されません。プログラムの実行に必要なすべての手順を実行するには時間がかかり、これらの実行手順を実行することをプロセスと呼びます。

プロセスは、一度に複数のタスクを実行する他のプロセスを作成できます。作成されたプロセスは次のように呼ばれます クローンまたは子プロセス 、メインプロセスはとして知られています 親プロセス 。各プロセスには独自のメモリ空間があり、他のプロセスと共有しません。それはアクティブなエンティティとして知られています。典型的なプロセスは以下の形式でメモリに残ります。

プロセスと糸

OS 内のプロセスは、次のいずれかの状態に留まる可能性があります。

    新しい: 新しいプロセスが作成されています。準備ができて: プロセスは準備ができており、プロセッサへの割り当てを待機しています。ランニング:プログラムが実行中です。待っている: 何らかのイベントが発生する、または発生するのを待っています。終了しました:実行が終了しました。

プロセスはどのように機能するのでしょうか?

プログラムの実行を開始すると、プロセッサがプログラムの処理を開始します。次の手順を実行します。

  • まず、プログラムは翻訳後にバイナリ コードでコンピュータのメモリにロードされます。
  • プログラムを実行するにはメモリとその他の OS リソースが必要です。レジスタ、プログラムカウンタ、スタックなどの資源と、これらの資源はOSによって提供される。
  • レジスタには、プロセスに必要な命令、ストレージ アドレス、またはその他のデータを含めることができます。
  • プログラム カウンタは、プログラム シーケンスの追跡を維持します。
  • スタックには、コンピュータ プログラムのアクティブなサブルーチンに関する情報が含まれています。
  • プログラムには異なるインスタンスが存在する場合があり、実行中のプログラムの各インスタンスは個別のプロセスとして知られます。

プロセスの特徴

  • プロセスを作成するたびに、OS に対してプロセスごとに個別のシステムコールを行う必要があります。の フォーク ()関数はプロセスを作成します。
  • 各プロセスは、独自のアドレスまたはメモリ空間内に存在します。
  • 各プロセスは独立しており、OS では独立したプロセスとして扱われます。
  • プロセスは相互に通信するために IPC (プロセス間通信) を必要とします。
  • プロセス間の適切な同期は必要ありません。

スレッドとは何ですか?

スレッドはプロセスのサブセットであり、軽量プロセスとも呼ばれます。プロセスには複数のスレッドを含めることができ、これらのスレッドはスケジューラによって独立して管理されます。 1 つのプロセス内のすべてのスレッドは相互に関連しています。スレッドには、次のような共通の情報が含まれています。 データセグメント、コードセグメント、ファイルなど、 それはピアスレッドに共有されます。ただし、独自のレジスタ、スタック、カウンタが含まれています。

そうでなければバッシュする
プロセスと糸

スレッドはどのように機能しますか?

すでに説明したように、スレッドはプロセス内のサブプロセスまたは実行ユニットです。プロセスには、単一のスレッドから複数のスレッドを含めることができます。スレッドは次のように動作します。

  • プロセスが開始されると、OS はプロセスにメモリとリソースを割り当てます。プロセス内の各スレッドは、そのプロセスのメモリとリソースのみを共有します。
  • スレッドは主にアプリケーションの処理を改善するために使用されます。実際には、一度に実行されるスレッドは 1 つだけですが、スレッド間のコンテキスト切り替えが高速であるため、スレッドが並列実行されているように見えます。
  • プロセス内で単一のスレッドが実行される場合、それは次のように呼ばれます。 シングルスレッド 複数のスレッドが同時に実行される場合、それは次のように呼ばれます。 マルチスレッド化。

ねじの種類

スレッドには次の 2 種類があります。

1. ユーザーレベルのスレッド

名前が示すように、ユーザーレベルのスレッドはユーザーによってのみ管理され、カーネルはその情報を持ちません。

bfsのアルゴリズム

これらはより高速で、作成と管理が簡単です。

カーネルは、これらすべてのスレッドを単一のプロセスとして受け取り、それらを 1 つのプロセスとしてのみ処理します。

ユーザーレベルのスレッドは、システムコールではなく、ユーザーレベルのライブラリによって実装されます。

2. カーネルレベルのスレッド

カーネル レベルのスレッドはオペレーティング システムによって処理され、そのカーネルによって管理されます。コンテキスト情報はカーネルによって管理されるため、これらのスレッドはユーザーレベルのスレッドよりも遅くなります。カーネルレベルのスレッドを作成して実装するには、システムコールを行う必要があります。

糸の特徴

  • スレッドは、プロセス内のピア スレッドとデータ、メモリ、リソース、ファイルなどを共有します。
  • 1 つのシステム コールで複数のスレッドを作成できます。
  • 各スレッドには独自のスタックとレジスタがあります。
  • スレッドは同じアドレス空間を共有するため、互いに直接通信できます。
  • 予期しないシナリオを回避するには、スレッドを同期する必要があります。

プロセスとスレッドの主な違い

  • プロセスは独立しており、別のプロセス内に含まれませんが、すべてのスレッドは論理的にプロセス内に含まれます。
  • プロセスは重みが高くなりますが、スレッドは重みが軽くなります。
  • プロセスは独自のメモリやその他のリソースを含むため個別に存在できますが、スレッドは個別に存在できません。
  • プロセス間の適切な同期は必要ありません。対照的に、予期しないシナリオを回避するには、スレッドを同期する必要があります。
  • プロセスは、プロセス間通信のみを使用して相互に通信できます。対照的に、スレッドは同じアドレス空間を共有するため、互いに直接通信できます。

プロセスとスレッドの違い表

プロセス
プロセスは、実行または処理されているプログラムのインスタンスです。 スレッドは、スケジューラによって独立して管理されるプロセスまたは軽量プロセスのセグメントです。
プロセスは互いに独立しているため、メモリやその他のリソースを共有しません。 スレッドは相互依存しており、メモリを共有します。
各プロセスは、オペレーティング システムによって新しいプロセスとして扱われます。 オペレーティング システムは、すべてのユーザー レベルのスレッドを 1 つのプロセスとして扱います。
1 つのプロセスがオペレーティング システムによってブロックされても、もう 1 つのプロセスは実行を続行できます。 ユーザーレベルのスレッドがブロックされると、OS はすべてのスレッドを単一のプロセスとして認識するため、そのピア スレッドもすべてブロックされます。
2 つのプロセス間のコンテキストの切り替えはスレッドに比べて重いため、時間がかかります。 スレッド間のコンテキストの切り替えは非常に軽量であるため、高速です。
各プロセスのデータ セグメントとコード セグメントは互いに独立しています。 スレッドはデータ セグメントとコード セグメントをピア スレッドと共有します。したがって、他のスレッドでも同じです。
オペレーティング システムがプロセスを終了するのに時間がかかります。 スレッドは非常に短時間で終了できます。
新しいプロセスの作成には、それぞれの新しいプロセスがすべてのリソースを消費するため、さらに時間がかかります。 スレッドの作成に必要な時間は短くなります。