1. 序章

このチュートリアルでは、プロセスとスレッドという2つのあいまいな用語を簡単に定義します。 その後、それらの違いを見ていきます。

2. 定義

プロセスとは、プログラムの実行です。プログラム自体、データ、ファイルなどのリソース、OSが保持するプロセス関係情報などの実行情報が含まれます。 OSを使用すると、ユーザーはシステムコールを介してプロセスを作成、スケジュール、および終了できます。

スレッドはセミプロセスです。 独自のスタックがあり、特定のコードを実行します。 実際のプロセスとは異なり、スレッドは通常、そのメモリを他のスレッドと共有します。 逆に、プロセスには通常、プロセスごとに異なるメモリ領域があります。

実装できるスレッドには、 kernel レベルのスレッド、ユーザーレベルのスレッド、ハイブリッドスレッドの3種類があります。

3. プロセスとスレッドの違い

スレッドとプロセスが別々のエンティティであると考える理由はありませんが、 これらの2つのエンティティのいくつかの特定のプロパティにより、それらは互いに異なります。 プロセスとスレッドの簡単な関係を見ることができます。

3.1. プロセスのいくつかの特定の特性

プロセスは、データや情報を共有しないという点で独特です。 それらは分離された実行エンティティです。 つまり、プロセスには独自のスタック、メモリ、およびデータがあります。 

複数のプロセスを作成するには、個別のシステムコールを使用する必要があります。 さらに、プロセス管理にはより多くのシステムコールが必要です。

最後に、複数のプロセスと連携するには、プロセス間通信( IPC )メカニズムを使用する必要があります。 この状況は、システムコールの数の増加にもつながります。

3.2. スレッドのいくつかの特定の機能

プロセスとは異なり、スレッドはデータと情報を共有します。ただし、スレッドには独自のスタックがあります。

1つのシステムコールを使用するだけで、複数のスレッドを作成できます。 さらに単純化するために、スレッド間の通信を維持するためにIPCなどの追加のメカニズムが必要ないため、スレッド管理にはシステムコールがほとんどまたはまったく必要ありません。

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

4. プロセスではなくスレッドを使用することの長所と短所

スレッドグループは、同じプロセス内で実行されるスレッドのセットです。 前に述べたように、それらは同じメモリを共有します。 したがって、同じグローバル変数、同じファイル記述子のセット、および同じヒープメモリにアクセスできます。

これらのスレッドはすべて並行して実行されます。 タイムスライスを使用するか、マシンに複数のプロセッサがある場合は、真に並列に使用します。

プロセスグループの代わりにスレッドグループを使用する利点の1つは、多くの操作を並行して実行できることです。これにより、イベントが到着したときに処理できます。

たとえば、データベースクエリを処理するスレッドとユーザーインターフェイスを処理するスレッドが1つずつある場合、ユーザー入力に応答しながら、ユーザーが要求するクエリを実行できます。

プロセスグループよりもスレッドグループを使用するもう1つの利点は、コンテキストの切り替えに関連しています。 スレッド間のコンテキスト切り替えは、プロセス間のコンテキスト切り替えよりもはるかに高速です。

コンテキスト切り替えとは、システムが1つのプロセスまたはスレッドの実行から別の実行中のプロセスまたはスレッドに切り替える方法を指します。 さらに、2つのスレッド間の通信は、通常、2つのプロセス間の通信よりも高速で簡単に実装できます。

プロセスとスレッドの関係と違いを見てみましょう。

グループ内のスレッドは同じメモリスペースを使用するため、いずれかのスレッドがそのメモリの内容を破損すると、他のスレッドの内容も破損する可能性があります。 プロセスに関しては、OSは通常、プロセスを相互に保護します。プロセスの1つが自身のメモリ空間を破壊しても、他のプロセスは影響を受けません。

スレッドよりもプロセスを使用するもう1つの利点は、プロセスを異なるマシンで実行できることです。一方、スレッドは通常、同じマシンで実行する必要があります。

5. 結論

この記事では、プロセスとスレッドという重要な用語について説明しました。 並行性並列性に関するこれら2つの基本的なエンティティの違いについて説明しました。