プロセスとスレッド

luagate/process-thread-introプロセスとスレッド入門24OS・Linux

上から下へ、全 24 枚そのまま並べています。

発表モードで開く

プロセスとスレッド入門

プロセスとスレッド

同時に動かす仕組み 〜OSのやりくり〜

1
1

目次

今日の流れ

1. OSの役割の復習

2. プロセスとは

3. 同時に動いて見える仕組み

4. スレッドと並行・並列

5. まとめと振り返り

2
2
プロセスとスレッド入門 - イントロ

今日のゴール

この時間で身につけてほしいことです。

  • プロセスが「動いているプログラム」だと分かる
  • 複数の処理が同時に動いて見える理由を説明できる
  • プロセスとスレッドの違いを区別できる
  • マルチスレッドの利点をイメージできる
  • 並行と並列の違いを説明できる
10
3
プロセスとスレッド入門 - イントロ

OSの役割(復習)

以前学んだOSは、コンピュータの資源を配る司令塔でした。今日の主役もこのOSです。

OS(オペレーティングシステム)

CPUやメモリといった資源を、複数のプログラムにうまく配り分ける土台のソフト。誰にいつCPUを使わせるかを決める、現場監督のような存在。

以前学んだコンピュータの土台ソフト

CPUやメモリを配り分ける

複数のプログラムをやりくりする

どれにいつ動かすかを決める

今日はこのやりくりの中身を見る

11
4
プロセスとスレッド入門 - イントロ

プロセス とは

プログラムが実際に動き出した状態のことを、プロセスと呼びます。

プロセス(Process)

実行中のプログラム1つ分のまとまり。専用のメモリ領域を持ち、他のプロセスとは基本的に独立して動く。料理でいえば、レシピ(プログラム)を実際に作っている1つの作業台。

実行中のプログラム1つ分

専用のメモリ領域を持つ

他のプロセスとは独立している

アプリを開くたびに作られる

お互いに干渉しにくい

12
5
プロセスとスレッド入門 - イントロ

プロセスのイメージ

プログラムは設計図、プロセスはそれを実際に動かしている作業現場です。

プログラム
  • 保存された設計図
  • まだ動いていない状態
プロセス
  • 設計図を動かした実体
  • メモリと資源を持つ
独立性
  • それぞれ別の領域
  • 1つ落ちても他は無事
13
6

プロセスとスレッド入門 - 切り替え

2

第2部 同時に動いて見える仕組み

高速で切り替えるCPU

20
7
プロセスとスレッド入門 - 切り替え

同時に動いて見える理由

CPUは一度に1つの処理しかできませんが、超高速で切り替えるので同時に見えます。

  • CPU1つは本来1度に1つの処理しかできない
  • それを目にも止まらぬ速さで切り替える
  • 短い時間ずつ順番に各処理を進める
  • 人の目には全部同時に見える
  • パラパラ漫画が動いて見えるのと同じ
21
8
プロセスとスレッド入門 - 切り替え

CPU割り当ての切り替え

OSは各処理に短い持ち時間を割り当て、順番に交代させています。

タイムスライス(時分割)

OSがCPUの時間を細かく区切り、各プロセスに少しずつ順番に割り当てる方式。1つが少し進んだら次に交代する。みんなで1つのコンロを順番に使うイメージ。

CPUの時間を細かく区切る

各処理に少しずつ割り当てる

少し進んだら次へ交代する

これを高速に繰り返す

結果として同時進行に見える

22
9
プロセスとスレッド入門 - 切り替え

コンテキストスイッチ

処理を交代するとき、今の作業状態を保存して次の状態を読み込む動きです。

コンテキストスイッチ(Context Switch)

動かす処理を切り替えるとき、それまでの作業状態を保存し、次に動かす処理の状態を読み込む動作。作業台を交代するたびに、メモを取って引き継ぐイメージ。

今の作業状態を保存する

次の処理の状態を読み込む

切り替えのたびに発生する

ほんの少しだが手間がかかる

切り替えが多すぎると無駄が増える

23
10
プロセスとスレッド入門 - 切り替え

切り替えの流れ

OSが処理を交代させるときの一連の動きを、順番に追ってみましょう。

処理Aを少し進める
Aの状態を保存する
Bの状態を読み込む
処理Bを少し進める
24
11

プロセスとスレッド入門 - スレッド

3

第3部 スレッド

プロセスの中の作業の流れ

30
12
プロセスとスレッド入門 - スレッド

スレッド とは

プロセスの中で動く、より細かい作業の流れのことです。

スレッド(Thread)

プロセスの中にある処理の流れの単位。1つのプロセスは複数のスレッドを持て、メモリを共有しながら別々の作業を同時に進められる。1つの作業台で複数の手が同時に動くイメージ。

プロセスの中の処理の流れ

1つのプロセスに複数持てる

メモリを共有して動く

別々の作業を同時に進める

プロセスより軽く作れる

31
13
プロセスとスレッド入門 - スレッド

シングルスレッド と マルチスレッド

作業の流れが1本か複数かで、できることや速さが変わります。

シングルスレッド

  • 流れが1本だけ
  • 1つ終わってから次へ
  • 重い処理で止まりやすい
  • 作りはシンプル

マルチスレッド

  • 流れが複数本ある
  • 別の作業を同時に進める
  • 待ち時間を有効に使える
  • 応答が止まりにくい
32
14
プロセスとスレッド入門 - スレッド

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

どちらも処理の単位ですが、メモリの持ち方や独立性に違いがあります。

プロセス
スレッド

メモリ

専用の領域を持つ

プロセス内で共有する

独立性

お互い独立

同じプロセス内で密接

作る重さ

やや重い

軽く作れる

影響

1つ落ちても他は無事

1つの不具合が全体に及ぶことも

33
15
プロセスとスレッド入門 - スレッド

マルチスレッドの利点

複数の流れを同時に動かすことで、待ち時間を減らし反応をよくできます。

待ち時間を活用
  • 通信待ちの間に別作業
  • 手が空かない
反応がよい
  • 重い処理中も操作できる
  • 画面が固まりにくい
資源を共有
  • メモリを共有して軽い
  • やり取りが速い
34
16

プロセスとスレッド入門 - 並行並列

4

第4部 並行と並列

似ているようで違う2つ

40
17
プロセスとスレッド入門 - 並行並列

並行 と 並列 の違い

言葉は似ていますが、本当に同時かどうかが違います。

並行(コンカレント)

  • 切り替えて同時に見せる
  • CPU1つでも実現できる
  • 実際は1つずつ進めている
  • 1人が複数の鍋を交互に見る

並列(パラレル)

  • 本当に同時に動かす
  • CPUが複数あって実現する
  • 別々の場所で同時進行
  • 複数人が別々の鍋を同時に見る
41
18
プロセスとスレッド入門 - 並行並列

処理の終わる速さ(イメージ)

CPUを複数使って本当に同時に動かすほど、重い処理が早く終わる傾向があります。あくまでイメージです。

100 相対的な所要時間806040200
100相対的な所要時間
90相対的な所要時間
35相対的な所要時間
1つずつ順番
並行(切替)
並列(複数CPU)

出典: 処理時間の傾向を示す概念図(概算)

42
19
プロセスとスレッド入門 - 並行並列

同時に動かすときの注意

同時に動かすと速くなる一方で、共有するデータの扱いには注意が要ります。

  • 複数の流れが同じデータを触ると混乱しやすい
  • 順番が前後して結果が変わることがある
  • 切り替えのしすぎは逆に遅くなる
  • 正しく動かすには取り合いの制御が要る
  • この資源の取り合いは次回のテーマにつながる
43
20
プロセスとスレッド入門 - まとめ
クイズ

振り返りクイズ

今日の内容を確認しましょう。

プロセスとスレッドの違いとして最も適切なものはどれ?

A
プロセスは画面で、スレッドは音
B
プロセスは専用メモリを持ち、スレッドはプロセス内でメモリを共有する
C
スレッドはCPUを使わない
D
プロセスは1つしか作れない
50
21
プロセスとスレッド入門 - まとめ
答え

振り返りクイズ 解答

プロセスとスレッドの違いとして最も適切なものはどれ?

A
プロセスは画面で、スレッドは音
B
プロセスは専用メモリを持ち、スレッドはプロセス内でメモリを共有する
C
スレッドはCPUを使わない
D
プロセスは1つしか作れない

プロセスは専用のメモリ領域を持ち独立して動きます。スレッドはプロセスの中にあり、メモリを共有しながら複数の作業を同時に進めます。だからスレッドは軽い反面、1つの不具合が全体に及ぶこともあります。

51
22
プロセスとスレッド入門 - まとめ

質疑・次回予告

今日のまとめと、次に学ぶテーマです。質問があればここで受け付けます。

今日のおさらい
  • プロセスは実行中のプログラム1つ分
  • CPUは高速な切り替えで同時に見せる
  • スレッドはプロセス内の軽い作業の流れ
次回予告
  • 仮想記憶とメモリ管理 〜足りないメモリを補う〜
  • 限られたメモリを賢く使う仕組みを学ぶ
52
23
"

プロセスは動いているプログラム、スレッドはその中の作業の流れ。OSが高速に切り替えるから、私たちには同時に動いて見える。並行と並列の違いも押さえて、OSのやりくりを味方につけましょう。

プロセスとスレッド入門

53
24