並行性と並列性の違いについて調べていたら、ググってみるとなんか誤解のある内容のブログがトップに引っかかって来たりして、なんでだろう?と思ってたら
オラクルさんのサイトで誤解がありそうな内容。元ネタはここらしい。
というわけで並行性と並列性についてオレオレ定義をしてみることにします。
まず、オラクルさんの誤解がどういうことかということを説明すると、
マルチスレッドプロセスがシングルプロセッサ上で動作する場合は、プロセッサが実行リソースを各スレッドに順次切り替えて割り当てるため、プロセスの実行状態は並行的になります
並行性ということはシングルプロセッサで動作することを規定しているわけではないと思っています。
オレオレ解釈では、並行性というのは並行動作をすることができるプログラムの状態そのもので、スレッドという仕組みがまさに並行性をプログラムに与えるための仕組みだと思っています。なのでオレオレ定義で並行性を定義するなら、
並行性
プログラム中の複数の処理ブロックが論理的に並行動作可能な状態。それぞれの処理ブロックは処理順序に関係なく実行することができ、共有するリソースの競合を回避することができる。
という感じでしょうか。スレッドはこの条件を満たすためのプログラム言語上の仕組みということが言えます。
では並列性とは、何でしょう?
並列性というのは、並行性をもつプログラムがマルチプロセッサやマルチコアのプロセッサによって時間的に並列で動作することです。なので、オレオレ定義では
並列性
並行性をもつプログラムが時間的に同時に動作することが出来る複数のプロセッサによって並列に実行される状態
といえます。
オレオレ定義なので言葉の定義の厳密性はあんまり突っ込まないでほしいと思います。