スレッドとは(全体像)
スレッドとは、プロセス(実行中のプログラム)の中にある、より小さな実行単位のことだ。1つのプロセスの中で、複数のスレッドを並行して動かすことを、マルチスレッドという。
部屋でたとえると分かりやすい。プロセスは「独立した部屋を持つ住人」、スレッドは「同じ部屋に住むルームメイト」だ。
ここでカギになるのが、プロセスとの違い。プロセスは、それぞれメモリが独立している(切り替えのコストが大きい)。一方、スレッドは、同じプロセス内でメモリを共有する(軽くて、切り替えが速い)。
ここで一番のポイント。スレッドは、プロセスそのものではない。「スレッド=プロセス」と思い込むと誤りで、スレッドはプロセスの中の、軽量な実行単位だ。
詳しく:排他制御と、デッドロック
ここが心臓部。ポイントを表で押さえよう。
スレッド・並行制御のポイント
| 項目 | やさしい意味 |
|---|---|
| スレッド | プロセス内の、軽量な実行単位 |
| プロセスとの違い | プロセスはメモリ独立、スレッドはメモリ共有(軽い) |
| 排他制御 | 同じデータを同時にいじらないよう、ロックして順番に使う |
| デッドロック | 互いに相手の資源を待ち合って、両方が止まる状態 |
スレッドはメモリを共有するので、複数のスレッドが、同じデータを同時にいじると、おかしくなることがある。これを防ぐのが、排他制御。ロック(ミューテックスやセマフォ)を使って、順番に使うようにするしくみだ。
ここで一番のポイント。メモリを共有するからこそ、排他制御が必要だ。「スレッドでは排他制御は要らない」と思い込むと誤りになる。なお、デッドロック(互いに相手の資源を待ち合って、両方が止まってしまう状態)にも注意が必要だ。
わかりやすく言い換えると
身近なたとえで整理しよう。
スレッドは、「同じ部屋(プロセス)に住むルームメイト。物(メモリ)を共有する」イメージ。プロセスが独立した部屋の住人なら、スレッドは共同生活だ。
「メモリを共有するから排他制御が必要」というのは、同じ物を同時に使おうとすると取り合いになるので、順番のルールがいること。要するに、共有するからこそ、ロックして順番に使う。
デッドロックは、「お互いが相手の持っている物を待ち続けて、どちらも動けなくなる状態」こと。つまり、待ち合いで止まってしまう。
試験のツボ
🔴 一番出る:スレッドの正体
①プロセスの中にある、より小さな実行単位(軽量)
②1プロセス内で複数を並行に動かす=マルチスレッド
🔴 次に出る:プロセスとの違い
①プロセスはメモリ独立(切り替えが重い)
②スレッドはメモリ共有(軽くて、切り替えが速い)
🟡 押さえると安定:排他制御とデッドロック
①メモリを共有するから、排他制御(ロックして順番に使う)が必要
②デッドロック=互いに待ち合って、両方が止まる状態
よくある間違い
①「スレッドは、プロセスとまったく同じものだ」→ ✗ スレッドは、プロセスの中の、より小さな(軽量な)実行単位。
②「スレッドでは、排他制御は必要ない」→ ✗ メモリを共有するので、排他制御(順番に使うしくみ)が必要。
③「スレッドは、プロセスよりメモリの切り替えが重い」→ ✗ 逆で、スレッドはメモリ共有なので軽い。重いのはプロセスの切り替え。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(スレッドの正体)
スレッドに関する次の記述のうち、最も適切なものはどれか。
- プロセスの中にある、より小さな実行単位(軽量)のことである
- 社員の出退勤を記録して、毎月の給与を計算するためのしくみだ
- 取引先へ毎月の請求書を郵送する、決まった事務作業のことを指す
- 完成したシステムを宣伝して、より多く売るための広告活動である
解答は 1 だよ!
スレッドは、プロセスの中にある、より小さな実行単位(軽量)なんだよ!同じ部屋に住むルームメイトのイメージだね!
選択肢2は給与計算、選択肢3は請求書の事務、選択肢4は広告で、どれも違うよ!
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | プロセス内の軽量な実行単位で正しい |
| 2 | ✗ | 給与計算のしくみではない |
| 3 | ✗ | 請求書の事務の話 |
| 4 | ✗ | 広告活動ではない |
オリジナル問題2(プロセスとの違い)
プロセスとスレッドの違いに関する次の記述のうち、最も適切なものはどれか。
- 社員の給与を計算するときだけ、違いが出るとされているものである
- 取引先への請求書の枚数しだいで、違いが決まるとされているのだ
- プロセスはメモリ独立、スレッドはメモリ共有で軽いものなのである
- プロセスもスレッドも、まったく同じものだとされているのである
解答は 3 だよ!
プロセスはメモリ独立、スレッドはメモリ共有で軽いんだよ!だからスレッドは切り替えが速いんだね!
選択肢1の給与、選択肢2の請求書、選択肢4の「まったく同じ」は、いずれも違うよ!
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 給与計算で違いが出るのではない |
| 2 | ✗ | 請求書の枚数で決まるのではない |
| 3 | ✓ | プロセス=メモリ独立・スレッド=共有で正しい |
| 4 | ✗ | プロセスとスレッドは違う |
オリジナル問題3(排他制御)
スレッドの排他制御に関する次の記述のうち、最も適切なものはどれか。
- 社員の給与を計算するときだけ、必要だとされているものである
- メモリを共有するので、ロックして順番に使う必要があるのである
- 取引先へ請求書を郵送するときだけ、必要だとされているのである
- スレッドでは、排他制御はいっさい必要ないとされているのである
解答は 2 だよ!
排他制御は、メモリを共有するので、ロックして順番に使う必要があるんだよ!同じ物を同時に使うと取り合いになるからだね!
選択肢1の給与、選択肢3の請求書、選択肢4の「必要ない」は、いずれも違うよ!
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 給与計算のときだけではない |
| 2 | ✓ | 共有するのでロックして順番に使うで正しい |
| 3 | ✗ | 請求書のときだけではない |
| 4 | ✗ | 共有メモリで排他制御は必須 |
まとめ
押さえどころ
- 🔴 スレッド = プロセスの中にある、より小さな実行単位(軽量)。1プロセス内で複数を並行=マルチスレッド。
- 🔴 プロセスとの違い = プロセスはメモリ独立(切り替えが重い)、スレッドはメモリ共有(軽くて速い)。
- 🟡 排他制御とデッドロック = メモリを共有するから排他制御(ロックして順番に使う)が必要。デッドロックは互いに待ち合って止まる状態。
次に学ぶ
- プロセス管理・スケジューリング ── OSがプロセスを管理する機能。スレッドは、そのプロセスの中の実行単位。
- OS(基本ソフト) ── コンピュータの土台。スレッドや排他制御も、OSが管理する。
執筆: SikakuQuest編集部