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