スレッドとは?プロセスの中で動く軽量な実行単位

公開: 更新: カテゴリ: テクノロジ系

30秒で結論

スレッドとは(全体像)

スレッドは、プロセスの中で実際に処理を進める担当者のこと。1つのプロセスの中に複数のスレッドを置けば、その中で複数の作業を同時並行で進められる。

身近にたとえると、会社(プロセス)と作業員(スレッド)だ。プロセスが「別フロアの会社」だとすると、スレッドは「同じ部屋にいる複数の作業員」。同じ部屋なので机や書類(メモリ)を共有でき、連携が速い。

押さえるのは、スレッドはプロセスよりずっと軽いということ。メモリを共有するので、切り替えのコストが小さく、起動も速い。「軽量プロセス」とも呼ばれる。


詳しく:プロセスとの違いとスレッドの種類だけ覚えれば戦える

ここが記事の心臓部。まずプロセスとスレッドを比べましょう。

プロセスとスレッドの違い

項目プロセススレッド
メモリ完全に独立同じプロセス内で共有
切り替えコスト大きい小さい(軽い)
データのやり取り手間がかかる共有メモリで直接・速い

プロセスはメモリが完全に独立しているので独立性が高い反面、切り替えが重い。スレッドは同じプロセスの中でメモリを共有するので、軽くて速い。「スレッド=プロセス」ではなく、スレッドはプロセスの中で動く軽い実行単位です。

次に、スレッドの種類。大きく2つあります。

ユーザスレッドとカーネルスレッド

種類管理する人特徴
ユーザスレッドライブラリ切り替えは速いが、マルチコアを活かせない(並行のみ)
カーネルスレッドOS本当の並列ができる(マルチコアを活かせる)

ユーザスレッドはライブラリが管理するので切り替えは速いのですが、複数のCPUコアで同時に動かす「本当の並列」はできません。カーネルスレッドはOSが管理するので、マルチコアで本当に同時に動かせます。現代の主流はカーネルスレッド(1対1モデル、Linuxのpthreadなど)です。

ここで取り違えやすいのが「スレッドは必ず本当に同時に動く」という思い込み。ユーザスレッドは時間で区切って交代しているだけ(並行)で、本当の同時実行(並列)にはカーネルスレッドとマルチコアが必要です。

並行と並列の違い

言葉意味
並行時間で区切って交代し、同時に進んでいるように見せる
並列複数のCPUコアで本当に同時に動かす

わかりやすく言い換えると

要するに、オフィスのたとえで覚えるとラクです。

プロセスとスレッド … プロセスは別フロアの会社(独立)、スレッドは同じ部屋の作業員(机・書類を共有・軽い)

ユーザ/カーネル … ユーザスレッドは切り替え速いが1コアだけ(並行)、カーネルスレッドはマルチコアで本当に同時(並列)

並行と並列 … 並行は交代で見せる、並列は本当に同時

つまり、「スレッドは共有で軽い」「本当の並列にはカーネルスレッド」、この2点が試験の急所です。


試験のツボ

🔴 一番出る:プロセスとスレッドの違い

①プロセス = メモリが完全独立・切り替えが重い

②スレッド = 同じプロセス内でメモリを共有・軽い

🔴 次に出る:ユーザスレッドとカーネルスレッド

①ユーザスレッド = ライブラリ管理・切り替え速いがマルチコア不可(並行のみ)

②カーネルスレッド = OS管理・本当の並列ができる

🟡 押さえると安定:並行と並列

①並行 = 時間で区切って交代し、同時に見せる

②並列 = 複数のCPUコアで本当に同時に動かす


よくある間違い

「スレッドとプロセスは同じもの」→ ✗  スレッドは同じプロセス内でメモリを共有する軽い実行単位。プロセスはメモリが独立。

「すべてのスレッドは本当に同時に動く」→ ✗  ユーザスレッドは交代で見せる並行のみ。本当の並列にはカーネルスレッドとマルチコアが必要。

「スレッドはプロセスより切り替えが重い」→ ✗  スレッドはメモリを共有するので切り替えは軽い。重いのはプロセス。


試験での出題パターン

実際の問題でたしかめてみよう。

オリジナル問題1(プロセスとスレッド)

📝 オリジナル問題 1 プロセスとスレッドの違い

プロセスとスレッドに関する次の記述のうち、正しいものはどれか。

  1. スレッドはメモリが完全に独立し、プロセスより切り替えが重い実行単位とされているのだ
  2. スレッドは同じプロセス内でメモリを共有する軽い実行単位で、切り替えのコストが小さい
  3. スレッドもプロセスもまったく同じもので、メモリの持ち方や軽さに違いはないものとされる
  4. スレッドは紙に印刷する装置のことで、プログラムの実行とは無関係なものとされているのだ
テクマスター
テクマスター 解答・解説

解答は 2 ですよ。

スレッドは同じプロセス内でメモリを共有する軽い実行単位で、切り替えのコストが小さいですね。「軽量プロセス」とも呼ばれます。

選択肢1の「メモリが独立で重い」、選択肢3の「同じもの」、選択肢4の「印刷する装置」はどれも誤りですよ。

選択肢判定理由
1スレッドはメモリ共有で軽い
2メモリ共有・切り替えが軽い
3メモリの持ち方も軽さも違う
4印刷する装置ではない

オリジナル問題2(ユーザとカーネル)

📝 オリジナル問題 2 ユーザスレッドとカーネルスレッド

ユーザスレッドとカーネルスレッドに関する次の記述のうち、正しいものはどれか。

  1. ユーザスレッドはOSが管理して本当の並列ができ、カーネルスレッドは並行しかできないとされる
  2. ユーザスレッドもカーネルスレッドもまったく同じで、並列できるかに違いはないものとされる
  3. ユーザスレッドはライブラリ管理で並行のみ、カーネルスレッドはOS管理で本当の並列ができる
  4. ユーザスレッドもカーネルスレッドもハードウェアの一種で、ソフトとは無関係なものとされる
テクマスター
テクマスター 解答・解説

解答は 3 ですよ。

ユーザスレッドはライブラリ管理で並行のみカーネルスレッドはOS管理で本当の並列ができるですね。現代の主流はカーネルスレッドです。

選択肢1のユーザとカーネルが逆、選択肢2の「同じ」、選択肢4の「ハードウェア」はどれも誤りですよ。

選択肢判定理由
1ユーザとカーネルの説明が逆
2並列できるかが違う
3ユーザは並行のみ・カーネルは並列可
4ソフトウェアの概念

オリジナル問題3(並行と並列)

📝 オリジナル問題 3 並行と並列の違い

並行と並列に関する次の記述のうち、正しいものはどれか。

  1. 並行は時間で区切って交代して見せ、並列は複数CPUコアで本当に同時に動かすことを指す
  2. 並行も並列もまったく同じ意味で、同時に動かすかどうかに違いはないものとされているのだ
  3. 並行は複数コアで本当に同時に動かし、並列は交代で見せるだけの方式とされているものだ
  4. 並行も並列も紙に印刷する手順のことで、プログラムの実行とは無関係なものとされている
テクマスター
テクマスター 解答・解説

解答は 1 ですよ。

並行は時間で区切って交代して見せ並列は複数コアで本当に同時に動かすことを指しますね。ユーザスレッドは並行のみ、カーネルスレッドは並列も可能です。

選択肢2の「同じ意味」、選択肢3の並行と並列が逆、選択肢4の「印刷する手順」はどれも誤りですよ。

選択肢判定理由
1並行は交代・並列は本当に同時
2同時に動かすかが違う
3並行と並列の説明が逆
4印刷する手順ではない

まとめ

押さえどころ

次に学ぶ


執筆: SikakuQuest編集部

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る