記事ディレクトリ
プロセスとスレッドの違い:単純で難しい問題
簡単に覚えておくと、プロセスはオペレーティングシステムによって割り当てられるリソースの最小単位であり、スレッドはCPUスケジューリングの最小単位です。実際、インタビュアーが100人に尋ねたため、インタビュアーの支持を得ることは非常に困難です。90人がこの文を言っても違いはありません。したがって、この記事はオペレーティングシステムの原則から始まり、プロセスとスレッドの違いを詳しく説明しています。その後、多分あなたの質問への答えは新しい理解を持っているかもしれません。最初にそれを収集してから、それを見ることができます。
プロセス実行とは
プログラムは、ディスクに静的に格納される一連の命令です。プログラムが実行されると、オペレーティングシステムはそれをメモリにロードして論理インスタンス、つまりプロセスを形成し、CPU、ファイル、ネットワークハンドルなどの必要なリソースを割り当てます。したがって、プロセスはオペレーティングシステムによって割り当てられるリソースの最小単位であると結論付けることもできます。プロセスのイメージ構造を以下に示します。
CPUの実行速度は、ディスクおよびメモリのIOをはるかに上回ります。したがって、一般的なCPUの実行では、タイムスライスローテーション方式が使用されます。プロセスが取得したCPU時間を実行した後、プロセスを切り替えて、次のCPUスケジューリングを待つ必要があります。
プロセスが必要とするリソースの準備ができたら、CPUがスケジュールするのを待つことができます。CPUに加えて、プロセスが所有する他のリソースは、プロセスの実行環境、つまりプロセスコンテキストを構成します。プロセスが取得したCPU時間を実行した後、プロセスを切り替える必要があります。切り替える前に、コンテキストを保存し、次にCPUがラッキーになるまで待機する必要があります。
スレッドとは
同時に、プロセスは1つのタスクしか実行できません(ファイルAを読み取るとき、同時にファイルBを読み取ることはできません)。これは、コンピューターのシングルコアCPUの環境と一致しています。しかし、テクノロジーの発達に伴い、業界はコンピューターにマルチコアCPUを装備し始めたため、CPUのパフォーマンスを最大限に活用するために、オペレーティングシステムはスレッドを導入しました。プロセスは複数のスレッドを作成でき、各スレッドにはプライベートスタック、プログラムカウンターなどがあります。ただし、親プロセスのリソースはスレッド間で共有できるため、スレッドの同期方法(Javaのロックなど)を制御する必要があります。
プロセスの実行は実際には、CPU時間を取得した後に実行されるプロセス内のスレッドであるため、スレッドはCPUスケジューリングの最小単位です。プロセスは複数のスレッドを作成でき、マルチコアCPUは複数のスレッドを同時にスケジュールできるため、プロセスは複数のタスクを同時に実行できます。
プロセスとスレッドの違い
上記の紹介を通じて、この質問に簡単に答えることができます。
- プロセスは相互に独立しており、相互に影響を及ぼしません。スレッドは独自のプライベートリソース(スタック、プログラムカウンターなど)を持っていますが、親プロセスのリソース(メモリ、ファイル、ネットワークハンドルなど)を他のスレッドと共有しています。
- プロセスは複数のスレッドを作成でき、スレッドはプロセスから独立して存在することはできません。
- スレッドの作成は、プロセスよりも少ないリソースを消費します。
- プロセスはオペレーティングシステムによって割り当てられたリソースの最小単位であり、スレッドはCPUスケジューリングの最小単位です