編集可能

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

最近は、プログラミングで並列(Parallel)と並行(Concurrent)といったことばが時々登場しますが、両者の違いについてはあまり理解されていないようです。
14
Ryo Asai @ryoasai74

Javaは最初からスレッドが使えたが、Java5のJSR166で並列ユーティリティが追加された。これからはConcurrent(並列)からParallel(並行)へ#java7

2011-07-07 18:06:23
Shingo Omura @everpeace

@ryoasai74 普通、パラレルが並列化でコンカレントが並行という訳があてられますね。少なくとも理論計算機科学の分野では。

2011-07-07 18:38:19
Ryo Asai @ryoasai74

おお、すみません。逆に書いてしまいました。これは良く間違えるのですよ。RT @everpeace: @ryoasai74 普通、パラレルが並列化でコンカレントが並行という訳があてられますね。少なくとも理論計算機科学の分野では。

2011-07-07 18:39:40
Rinta @rinta100

@ryoasai74 @everpeace コンカレントはパラレルと比べて、同時性、みたいなニュアンスが強いイメージがありますね。

2011-07-07 18:44:28
Rinta @rinta100

@ryoasai74 @everpeace わたしの理解では同時に実行できればコンカレント。物理コアが2つあって、両方が同時に動いているイメージ。パラレルは必ずしも同時である事は求められないのかなと。

2011-07-07 21:37:47
Ryo Asai @ryoasai74

@rinta100 @everpeace 逆ではないかな?とにかくparallelは普通平行と訳されてこれを並行と間違えるな。正しくは並列。難しい。

2011-07-07 21:50:37
Rinta @rinta100

@ryoasai74 @everpeace Webをちょこちょこ検索した感じだと「コンカレント・パラレル」みたいに併記してあるところが多くて、厳密な意味合いの違いがはっきりしないですね。組み込みやってる人とかなら、詳しいのかも?

2011-07-07 21:55:08
Shingo Omura @everpeace

@rinta100 @ryoasai74 「厳密な」定義はないと思います。分散系の人はコンカレントを使う人が多く、一昔研究された、「この問題はどこまで並列化可能か?」=「本質的逐次性」の研究の人達は、パラレルって使ってる人が多い印象です(パラレルアルゴリズムと言っていた)。

2011-07-07 22:03:35
Rinta @rinta100

@everpeace @ryoasai74 住んでる世界によって意味合いが変わりそうですね。私が良く気にするのはDBの同時実行制御(コンカレンシコントロール)とかなんで「同時」というのが強調されがち。

2011-07-07 22:06:50
Ryo Asai @ryoasai74

いろいろな理解や定義があるようですが。少なくとも訳はこの通りみたい。 / parallel と concurrent、並列と並行の違い - Text::Easyhacking http://htn.to/SJ8pVw

2011-07-07 22:18:49
Shingo Omura @everpeace

@rinta100 @ryoasai74 なるほど。そうですね。話はそれますが、パラレルってコンカレントより意味広そう(抽象度高そう)ですよね。パラレルを逐次でシミュレートするって言えるけれど、コンカレントは逐次でシミュレートできない、しちゃったらコンカレントじゃねぇ、みたいな。

2011-07-07 22:22:08
Yuichi Sakuraba @skrb

昨日、思ったこと。並列と並行ってちゃんと把握されていないような気がする。日本語だとほとんど同じ意味だしね。なので、これからは並列、並行といわずに、あえて英語のままコンカレントとパラレルというようにしようと思う。

2011-07-08 20:58:16
Hidetaka MASUDA @manu3da4

実CPUの数とコアの数が違うからどうなんだろ。並行と並列

2011-07-08 20:59:39
Yuichi Sakuraba @skrb

@skrb 自分でも時々並列と並行を間違えて言ったり、書いたりしていることがあるしww

2011-07-08 21:02:47
Yuichi Sakuraba @skrb

@naka_aki_spl 実際の概念的には簡単なので大丈夫です!! ただ、漢字だと意味が明確にならないなぁと感じているというだけです。Concurrentが1つのCPUの中で切り替えて複数のことをやることで、Parallelが複数のCPUでバラバラに複数のことをやることです。

2011-07-08 21:18:36
しんさん @shinsan68k

@skrb @naka_aki_spl おいらの感覚とちょっと違うなぁ。パラレルとコンカレントは同一のレベルで相反するものという感じではなくて、パラレルはシリアルの反対の言葉で、コンカレントはより上位のタスク志向的な意味合いかと。

2011-07-08 21:37:21
Yuichi Sakuraba @skrb

@shinsan68k @naka_aki_spl 確かに、パラレルに対応するのはシリアルですね。そういう意味では、英語の正しいニュアンスは分かっていないかもしれません。もう言葉1語であらわそうとするのをやめて、毎回説明しようかなぁww

2011-07-08 21:41:13
しんさん @shinsan68k

@skrb @naka_aki_spl 1つの作業をたくさんの人手で同時に行うことがパラレル、並列。並列という名の通り、隣の人とのタスクとは交わらなく、きれいに流れてる印象。その分作業が早く終わる。コンカレント、並行はそれぞれの人が違う作業を行い、結果として一人で行うよりも早い

2011-07-08 21:53:21
しんさん @shinsan68k

JavaのGCを見ると面白いかもしれない。パラレルGCは複数のスレッドを利用してひとつのまとまった処理を行います。その間時間は止まりますが、停止時間は短くなります。コンカレントGCはアプリの処理のスレッドのほかにGC専用にスレッドが動いています。どちらもまじわらず平行して動きます

2011-07-08 21:59:42
++C++; // 管理人: 岩永 @ufcpp

並列と並行(の日本語の字面から受ける印象の)区別が難しいってのに対して、MSDNとか見てみると実はConcurrentの訳語が全部「同時実行」になってる。並行って言わない。

2011-07-08 22:00:11
しんさん @shinsan68k

なんか並列と平行のところ一部ミスって書いてるが気にしないことにする。パラレルはパラレルポートのイメージでいいと思います。PCI-Expresssは転送の部分だけ見るとコンカレントっぽいけど、転送するデータを考えるとやはりパラレル。

2011-07-08 22:15:44
きしだൠ(K8S(Kishidades)) @kis

@ryoasai74 タイムシェアリングだと、並列(paralell)ですね。

2011-07-09 12:08:06
Ryo Asai @ryoasai74

Parallel collectionのように各処理がまったく均質なイメージが並列で、まったく別々の独立したタスクを同時に実行するのがconcurrent(並列)というのが英語上の使い分けのイメージではないでしょうか。

2011-07-09 12:08:35
t_yano @t_yano

@ryoasai74 パラレルは互いに共有リソースを持たずにそれぞれ独立して動いて、コンカレントはリソースを共有しつつ競合状態の中で同時に稼働するイメージが。

2011-07-09 12:12:29
Ryo Asai @ryoasai74

@kis タイムシェアリングとタイムスライシングを間違えましたが、同じ本にマルチスレッドのconcurrencyがスレッド数がコア数より多い場合はimplemented by time slicingという説明が出てきます。

2011-07-09 12:12:37
残りを読む(13)

コメント

Shiro Kawai @anohana 2011年7月9日
コンカレントは物理的な実行形態を捨象して、抽象的な意味で制御の流れが同時進行していること。その実行形態として、複数プロセッサがパラレルに実行することもあれば、単一プロセッサをタイムシェアリングすることもある。見てるレイヤが違う、ってことで @shinsan68k さんの解釈で良いのではないかと。
0