プロセスとスレッド(process and thread)
- テクノロジ系
- ソフトウェア
- 基本情報
- 応用情報
- 重要度 ★★★☆☆
プロセスは資源を持つ実行の単位。スレッドはその中で資源を共有して動く単位。
もう少し詳しい説明
プロセスとスレッドは、どちらもプログラムを動かす単位です。違いは、資源を持っているかどうかにあります。
- プロセス:メモリなどの資源を持つ「入れ物」
- スレッド:その入れ物の中で、実際に手を動かす「担当」
1つのプロセスの中に、スレッドを複数持てます。逆はありません。この包含の向きが、試験でまず問われます。
何が違うのか
いちばんの違いは、メモリを共有するかどうかです。
| プロセスどうし | 同じプロセス内のスレッドどうし | |
|---|---|---|
| メモリ | 別々に持つ | 共有する |
| 切り替えの重さ | 重い | 軽い |
| データの受け渡し | 手間がかかる | そのまま読み書きできる |
| 片方が異常終了したら | 他方は影響を受けにくい | 巻き添えになりうる |
ここから、それぞれの向き不向きが出てきます。
プロセスを分けると、安全です。メモリが別なので、一方が壊れてももう一方は無事でいられます。ブラウザがタブごとにプロセスを分けているのは、1つのページが落ちても全体が巻き添えにならないようにするためです。
スレッドを分けると、軽いです。メモリが同じなので、切り替えにかかる手間が小さく、データの受け渡しも速い。1つのアプリの中で複数の作業を同時に進めたいときに向きます。
共有しているから、危ない
スレッドが軽いのはメモリを共有しているからですが、その共有が問題も生みます。
同じデータを、2つのスレッドが同時に書き換えたらどうなるでしょうか。どちらも「いまの値」を読んでから書き戻すので、片方の更新がなかったことになります。残高1万円の口座から2人が同時に引き出す、という話とまったく同じ形です。
だから、同時に触られると困るところには鍵をかけます。これが排他制御で、その仕組みの1つがセマフォです。そして鍵を取り合った結果、互いに待ち合って動かなくなるのがデッドロックです。
スレッドを使うなら、排他制御はセットで必要になる。 この因果関係が、この分野の問題を解く軸になります。
コンテキストスイッチ:切り替えの手間
CPUは、同時に複数のことをしているように見えますが、実際には短い時間で相手を切り替えているだけです。この切り替えをコンテキストスイッチと呼びます。
切り替えるとき、いま動いていた側の状態(レジスタの内容など)を保存し、次に動かす側の状態を復元します。この保存と復元に時間がかかります。
プロセスの切り替えは重く、スレッドの切り替えは軽いのは、スレッドならメモリの切り替えが要らないからです。保存し直すものが少なくて済みます。
覚え方:入れ物と、中で動く人
名前の役割を取り違えたときは、どちらが「場所」でどちらが「動き」かで戻してください。
- プロセス(process = 処理のひとまとまり)→ 資源を抱えた入れ物
- スレッド(thread = 糸)→ その中を通る1本の流れ
糸は布の中を通るものであって、糸の中に布は入りません。大きいほうがプロセスと押さえておけば、包含の向きを逆にすることはありません。
試験ではこう出る
科目A(旧・午前)のソフトウェア分野で出ます。多いのは、プロセスとスレッドの関係や違いの説明を選ばせる問題です。「同じプロセス内のスレッドはメモリ空間を共有する」「スレッドの切り替えのほうが軽い」の2点が軸になります。応用情報では、マルチスレッドで起こる問題(同じデータの同時更新)と、その対策である排他制御やセマフォを結びつけて問われます。
誤りの選択肢は、包含の向きを逆にしたもの(スレッドの中にプロセスがある)と、共有の有無を逆にしたもの(同じプロセス内のスレッドが独立したメモリを持つ)の2種類がほとんどです。**「大きいほうがプロセス、中は共有」**の2つを固定しておけば、その場で2つ外せます。
関連する用語
- セマフォ
- 同時に使える数を管理して待たせる仕組み。スレッドの取り合いを整理する
- 排他制御
- 同時に触られると困るデータに鍵をかける仕組み
- デッドロック
- 鍵を取り合った結果、互いに待ち合って動けなくなる状態
- 割込み
- 実行中の処理を中断して別の処理を行い、終わったら戻る仕組み
- コンテキストスイッチ
- 動かす相手を切り替えること。プロセスどうしの切り替えは重く、スレッドは軽い
- キュー
- 先に入れたものから先に出す入れ物。順番待ちの管理に使われる
ミニクイズ
プロセスとスレッドの関係の説明として、最も適切なものはどれか。
正解は 2番:1つのプロセスの中に複数のスレッドを持つことができ、それらはメモリ空間を共有する
プロセスがメモリなどの資源を持つ入れ物で、スレッドはその中で実際に動く実行の単位です。1つのプロセスが複数のスレッドを持てる、という包含の向きを取り違えないでください。同じプロセス内のスレッドはメモリ空間を共有するので、切り替えが軽く、データの受け渡しも速くなります。そのかわり、同じデータを同時に書き換えてしまう危険があるため、排他制御が必要になります。独立したメモリ空間を持つのはプロセスどうしの関係で、だからこそ一方が異常終了しても他方に影響しにくくなっています。
最終更新:2026-09-16