「プロセス」「スレッド」、どちらも「処理の単位」として説明されるけど、何が違うのか曖昧なまま学習を進めていませんか。編集部でも基本情報技術者試験の学習を振り返りながら、この2つを整理してみました。
まず結論:プロセスとスレッドは「独立した部屋を持つか、部屋を共有するか」が違う
- プロセスは、OSからメモリ空間を割り当てられた「独立した実行単位」
- スレッドは、1つのプロセスの中で動く「処理の流れ」で、同じプロセス内のスレッド同士はメモリを共有する
- プロセスを切り替えるより、スレッドを切り替えるほうが軽く、速い

プロセスとは?――会社という「独立した組織」のようなもの
プロセスは、OSが実行中のプログラムに割り当てる「ひとまとまりの作業単位」です。それぞれのプロセスには専用のメモリ空間が割り当てられていて、他のプロセスのメモリを勝手に読み書きすることはできません。
これは、それぞれ独立したオフィスを持つ会社のようなものだと考えています。A社のキャビネットの中身を、B社の社員が勝手に見ることはできません。会社ごとに独立した空間があるからこそ、他の会社の都合で自分の会社の作業が壊れる心配がない、という安心感があります。
Windowsのタスクマネージャーや、macOSのアクティビティモニタで見える「アプリケーションの一覧」は、おおむねこのプロセス単位に対応しています。ブラウザ、メールソフト、テキストエディタは、それぞれ別々のプロセスとして動いています。
スレッドとは?――同じ会社の中で卦く「複数の社員」のようなもの
スレッドは、1つのプロセスの中で実行される処理の流れです。1つのプロセスは、最低でも1つのスレッド(メインスレッド)を持ちますが、複数のスレッドを同時に動かすこともできます。
これは、1つの会社(プロセス)の中で複数の社員(スレッド)が働いている状態に近いと考えています。同じオフィスの同じキャビネット(メモリ)を、複数の社員が共有して使っている状態です。誰かが書類(データ)を更新すれば、他の社員もすぐにその変更を見ることができます。
たとえば、動画再生アプリが「映像を再生するスレッド」と「字幕を表示するスレッド」を同時に動かしているのは、この仕組みによるものです。同じプロセスの中で複数の処理を並行して進めることで、アプリ全体としてスムーズに動作します。
「プロセスとスレッドの違い」をオフィスの構造でわかりやすく解説
| 観点 | プロセス | スレッド |
|---|---|---|
| たとえ | 独立した会社(オフィス) | 会社の中で卦く社員 |
| メモリ空間 | 各プロセスごとに独立 | 同じプロセス内のスレッド同士で共有 |
| 切り替えコスト | 重い(メモリ空間ごと切り替える) | 軽い(同じメモリ空間内で切り替わる) |
| 影響範囲 | 1つのプロセスが落ちても他のプロセスには基本的に影響しない | 1つのスレッドの不具合が同じプロセス内の他のスレッドに影響しやすい |
| 例 | ブラウザ・メールソフト・テキストエディタ | ブラウザ内の「描画」「通信」「UI操作」などの内部処理 |
同じ会社の社員同士は情報共有がスムーズな分、1人の社員が書類を壊してしまうと、同じキャビネットを使う他の社員にも影響が及びやすい。逆に別会社同士なら、片方が倒産しても、もう片方の会社の業務にはすぐには影響しません。プロセスとスレッドの違いも、これとよく似た構造だと考えています。
なぜスレッドだけで考えてはダメなのか?
「メモリを共有できるなら、全部スレッドで作ればいいのでは」と思うかもしれません。ですが、メモリを共有しているということは、1つのスレッドの不具合が、同じプロセス内の他のスレッドすべてに波及するリスクがあるということでもあります。
たとえば、あるスレッドが誤ってメモリ上のデータを壊してしまうと、同じプロセスを共有する他のスレッドの処理まで巻き込んで異常終了することがあります。一方、プロセスを分けておけば、片方のプロセスに問題が起きても、OSがメモリ空間を隔てているため、他のプロセスは影響を受けにくくなります。
Webブラウザの多くが「タブごとに別プロセス」で動作する設計を採用しているのは、1つのタブがクラッシュしても、他のタブの表示や操作に影響を与えないようにするためだと理解しています。安定性を優先する場面ではプロセスを分け、速度や情報共有の効率を優先する場面ではスレッドを使う。この使い分けの発想が、設計を考えるうえで欠かせないと感じています。
実際の使われ方:OSがプロセスとスレッドをどう管理しているか
1. アプリを起動すると、OSがそのアプリのために新しいプロセスを作成し、メモリ空間を割り当てる
2. プロセスの中に、処理を実行するための最初のスレッド(メインスレッド)が生成される
3. 必要に応じて、同じプロセス内に追加のスレッドを生成し、複数の処理を並行して進める
4. CPUは「スレッド」を単位として処理を切り替えながら実行する(これをコンテキストスイッチという)
5. アプリを終了すると、プロセスに割り当てられていたメモリ空間がOSによって解放される
CPUが実際に処理を切り替える単位は「プロセス」ではなく「スレッド」である、という点は、基本情報技術者試験でも問われやすいポイントだと編集部では捉えています。
まとめ:3行で理解するプロセスとスレッド
プロセスは独立したメモリ空間を持つ実行単位で、スレッドはその中で動く処理の流れです。スレッド同士はメモリを共有できるぶん軽量に動かせますが、影響範囲も広がります。安定性を取るか効率を取るか、という設計判断の土台になる考え方だと捉えておくとよさそうです。
用語だけを暗記しようとすると混同しやすい概念ですが、「独立した会社か、同じ会社の社員同士か」という構造で捉えると、試験問題でも迷いにくくなると編集部では感じています。
よくある質問
Q1. プロセスとスレッド、どちらが先に生成されますか?
プロセスが先に生成されます。OSはアプヮの起動時にまずプロセスを作成し、そのプロセスの中に最初のスレッド(メインスレッド)が自動的に生成される、という順序です。プロセスなしにスレッドだけが単独で存在することはありません。
Q2. マルチスレッドとマルチプロセス、何が違いますか?
マルチスレッドは1つのプロセスの中で複数のスレッドを動かす方式で、メモリを共有できる分、データのやり取りが速い一方、1つのスレッドの不具合が他に波及しやすい構造です。マルチプロセスは複数の独立したプロセスを動かす方式で、メモリが分かれている分、安定性は高いものの、プロセス間でのデータのやり取りにはOSの仕組み(プロセス間通信)を使う必要があり、やや手間がかかります。
Q3. 基本情報技術者試験ではどのように出題されますか?
「CPUのスケジューリング単位はスレッドである」「同一プロセス内のスレッドはメモリ空間を共有する」といった性質を問う選択問題や、マルチスレッドとマルチプロセスのメリット・デメリットを比較させる問題が出やすい傾向にあると編集部では見ています。実際の出題形式は年度によって変わるため、最新の出題範囲は情報処理推進機構(IPA)の公式サイトで確認することをおすすめします。
参考:[IPA 独立行政法人情報処理推進機構](https://www.ipa.go.jp/shiken/)


コメント