ParallelとConcurrentについて少し考えてみる

並列(Parallel)と並行(Concurrent)の違いについて - Togetter


 大学院生のころ、やたらとプログラミング言語やその実行環境について色々調べていた頃があって、そのときもこの辺の扱いが曖昧な感じで説明されていたのでもやっとしていたのだが、当時「なるほど」と思った文章がWebに公開されていた。
 それがこれ。


Java並列プログラミングTips(オリジナルの文章はすでにないようなので、Internet Archiveから取得)


 ここから引用すると、ParallelとConcurrentの違いは以下のようであると説明されている。

  • 逐次(sequential)処理:(比較のため用意した.)ある処理の順番が完全に 一次元で表現できるような処理.シングルスレッド/シングルプロセスの処理 とほぼ等価.並行,又は並列の反対語.あくまでプログラムのレベルにおいて 逐次で記述しているだけで,CPU内部ではパイプライン やスーパースカラ, さらにはVLIW などによって既に 並列実行されているのが普通.
  • 並行処理(ここではこれがParallel):高速化技術の一つで,物理的にCPU が二つ以上あり,スレッドやプロセス等が時間的に同時に動作しているが,そ れらの間の通信や相互作用が粗なもの.
  • 並列処理(こちらがConcurrent):並行とほぼ同じで高速化技術の一 つだが,通信や相互作用が密な物.並行と並列とでは本質的な差はほとんどな く,明確な区別無しに使われている場合も多いと思う.(どちらの用語を使う か悩んだ時は,「並列コンピュータ」では"parallel computer", 「並列プログラミング」では"concurrent programming"を使うこと をお勧めする.)
Java並列プログラミングTips


 つまり上記の内容だと、Parallelは同時実行しているプロセス・スレッドなどが互いに影響を及ぼすことが少ないConcurrentは同時実行しているプロセス・スレッドが互いに競合するメモリがあったり、相互作用があったりするということになる。ただし、本文中に「程度問題」と書かれているので、これを書かれた方は最終的にはあまり区別はないと考えているようだ。
 もう一点、この資料では並行と並列がTogetterでの話と逆になっているので注意。ただ上記の資料はとても面白いので、読んでおくのが吉。とても為になります。



 次にこちら。



ConcurrentとParallel - 川西 裕幸のブログ - Site Home - MSDN Blogs


 Microsoftでは以下のような定義であるらしい。

PDC 08のスライドによると、Concurrentは独立した要求を同時に実行することで、Parallel(あるいはParallelism)は一つのタスクを複数に分解D(Decompose)してConcurrentに実行できるようにすることとなっています。MSDNのParallel関連のドキュメントの日本語訳にはConcurrentに「同時実行」が当てられています。

ConcurrentとParallel - 川西 裕幸のブログ - Site Home - MSDN Blogs


 なんだか文章からすると先ほどの内容とは逆の印象を受けますねえ。ちなみに英WikipediaのParallel Computingの解説を見ると、なんとなくMicrosoftのParallelのイメージに近い気がします。

Parallel computing is a form of computation in which many calculations are carried out simultaneously,[1] operating on the principle that large problems can often be divided into smaller ones, which are then solved concurrently ("in parallel").

Parallel computing - Wikipedia, the free encyclopedia


 とまあ、少しばかり調べたけどここらあたりで挫折。明確な定義は特に見つからず。自分のイメージだとparallel と concurrent 、並列と並行の覚え方 - まめめものイメージがぴったり合うんだけどねぇ。


Java並行処理プログラミング ―その「基盤」と「最新API」を究める―

Java並行処理プログラミング ―その「基盤」と「最新API」を究める―


分散システム 第二版

分散システム 第二版

  • 作者: アンドリュー・S・タネンバウム,マールティン・ファン・スティーン,Andrew S. Tanenbaum,Maarten van Steen,水野忠則,佐藤文明,鈴木健二,竹中友哉,西山智,峰野博史,宮西洋太郎
  • 出版社/メーカー: ピアソン桐原
  • 発売日: 2009/01/01
  • メディア: 単行本
  • 購入: 2人 クリック: 29回
  • この商品を含むブログ (13件) を見る

The Art of Multiprocessor Programming 並行プログラミングの原理から実践まで

The Art of Multiprocessor Programming 並行プログラミングの原理から実践まで