平行はモデルで、並列は結果である(Concurrency is a model, parallelism is a result)

マルチスレッド・マルチコアプログラミングでよく話題になる「平行(Concurrency)と並列(Parallelism)」の関係について。
僕が今まで見た中で一番すっきりした説明は、Rob Pike先生の以下の動画。

http://www.infoq.com/interviews/pike-concurrency

この中で先生が一言で説明してくれている。

「平行はモデルで、並列は結果である(Concurrency is a model, parallelism is a result)」

これは次のような意味である。(…たぶん)

あるマルチスレッドな処理を行うアプリケーションを書いたとする。このコードを書いた時点で、(マルチスレッドで処理するようにモデルを決定したので、)既にConcurrentであることは決まった。

実行時に、実行する環境がシングルコアだったら、それは真にParallelには実行されない。
実行時に、実行する環境がマルチコアだったり、Hadoopのような分散環境であれば、真にParallelに実行されるだろう。

つまりConcurrencyとParallelismは相対する概念ではなく、ConcurrentかつParallelの場合もあるし、単にConcurrentの場合もある、ということ。
事前にConcurrentであるかどうかはモデルとして決定していて、実行時の環境によってParallelかどうかが決まる(結果となる)。

Advertisements


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s