はじめに
並列処理と並行処理、スレッドとプロセス、それに関連する語句やらがややこしいのでまとめました。メモです。
目次
並列処理と並行処理
2つ以上の処理をどのように行うかという話
並列処理
- 複数の処理を同時に行うこと
- 3つのタスクを3人同時で行うイメージ
- ある時間の点において複数のタスクを扱うこと
並行処理
- 高速で処理の切り替えを行うことで、複数の処理を同時にやってるように見せかける仕組み
- 3つのタスクを高速で切り替えながら1人で行うイメージ
- ある時間の範囲において複数のタスクを扱うこと
それぞれ3つ目の説明は、「時間軸」という観点からの説明だが、ある範囲において複数のタスクを扱うことは、ある点において複数のタスクを扱うことの上位であるとして、並行処理は並列処理の上位概念であるとしているサイトもいくつか見られた。有識者からコメントを頂きたい。
プロセスとスレッド
プロセス
- コンピュータにおけるプログラムの実行単位のこと
- OSからメモリ空間が割り当てられる
- 1つのプロセス専用のメモリ空間が必要
- プロセスの最大の目的はプログラムごとのメモリ領域の独立性、不可侵性を保つこと
プロセスは実態を伴った処理ではなく、メモリ上で複数または単独の処理をまとめて管理しているものだと考えることができます。(プロセスの最大の目的はプログラムごとのメモリ領域の独立性、不可侵性を保つことです)
スレッド
- プロセスの中の実行単位
- プロセスは1つ以上のスレッドを持つ
マルチプロセス
- 複数のプロセスを同時に行うこと
- 1つのプログラムを複数の実行環境に分けて同時に処理を進める
- 基本的に各プロセスはメモリ空間を共有しないため、データの共有にはプロセス間通信が必要
- コア数を超えたスケールはできない
- Pythonでは後述のマルチスレッドが実行できないので、並列処理にはマルチプロセスを使用する
マルチスレッド
- 1つのプロセス内に複数のスレッドがある状態
- それぞれのスレッドを別のCPUコアに分けて処理させることで並列処理が可能
- それぞれのスレッドは同じプロセス内にあって、メモリ空間を共有するので、何も対策をしないと、意図せずデータが書き替えられたり。お互いがお互いのロック開放待ち状態になり処理が停止してしまう状態(デッドロック)が発生してしまったりする
CPUコア
CPUの中核部分。CPUがコアを複数持っていることをマルチコアもしくはマルチコアプロセッサという。
基本的にコア数が多いほど性能が良くなる
参考サイト