たなかこういちの資料室

システム開発に携わる筆者があれこれ試したことや学んだことについてのまとめ

「並列(Parallel)」と「並行(Concurrent)」について、まとめ

(※"Parallel"の直訳は「平行」(※漢字が違います!)、"Concurrent"の直訳は「同時」であり、紛らわしさに拍車をかけてます。)
 
 
並列(Parallel)

 

処理にかかる時間を短縮するために、単一タスクを複数の小タスクに分割して、複数のコア/プロセッサ/マシンに小タスクを割り振って同時に実行すること。
 
<関連する用語>
Scale-out, Map-Reduce, Hadoop, Presto, ...
 
並行(Concurrent)
 
(1) 独立に非同期に処理される複数の異なるタスクがキューやメッセージングなどを介して連携するとき、その複数の異なるタスクは並行に稼働しているという。(※単一コア/プロセッサ/マシンの時分割か、物理的に複数コア/プロセッサ/マシンを用いるかは問わない。)
 
(2) サーバーで「複数のクライアントからのアクセスを同時に捌く」というようなこと、および/またはその仕組みも「Concurrent」という。(しかしこの場合には日本語の「並行」はあまり使わない感じ。)
 
<関連する用語>
Reactive, Future, Actor, Akka, Finagle, ...
 
 
「並列(Parallel)」を議論するときには、おおよそ「元々一つだったものを如何に散らすか(散らしても如何にひとつのように見せられるか)」という「多を単へまとめあげる」といった文脈性がありそうです。
 
対して「並行(Concurrent)」を議論するときには、おおよそ「複数のものを如何にひとつのものの上で動かすか」、「複数のものを如何に一体的に機能させるか」という、「多を多のままに統治する」といった文脈性があると言えそうです。
 
もう一点。「並列(Parallel)」に関わる(今ホットな)技術は、いずれもおおよそ基盤(インフラ)構築の課題と認識されるのに対し、「並行(Concurrent)」に関わる(今ホットな)技術は、いずれもおおよそアプリケーションの在り方を問うようなものに思えます。
 
なお、「BASE Transaction」や「Eventually Consistency」は、それが必要な場面では、並列(Parallel)においても並行(Concurrent)においても議論されます。
 
◆以上