文章を修正しました一般的に、parallelは並列、concurrentは並行と訳されます。検索してもずばり書かれた物がなかったので、僕なりの理解を書いてみます。(注:言葉の定義の問題なので、複数の流儀があり得ます。一言で言えば、Concurrent(並行)は「複数の動作が、論理的に、順不同もしくは同時に起こりうる」ことParallel(並列)は、「複数の動作が、物理的に、同時に起こること」です。並行」ではないという定義もあります)。この2つは、そもそも目的が違う概念です。並行というのは、世の中一般、同時進行するものごとをプログラムとして表現する際に用いる広い概念です。一方で並列というのは、主に計算速度を稼ぐために計算を同時に進めることを言います。「論理的に順不同に起こりうる」とはどういうことでしょうか。CPUが1コアだった時代、よく「ひとつのパソコンで、ネットサーフィン(死語)をしながらメールを読めるのはどうしてでしょうか」という質問がありました。これに対する答えは、「CPUが仕事を細切れにして交互に処理しているからです」というものです。concurrent」です。CPUがシングルコアであった時代は、ミクロなレベルで見れば計算処理は同時実行されていません。ある瞬間を切り取ってみれば、CPUは1つの仕事しかしていないわけです。人間が認知できる時間間隔で見れば十分に「同時っぽい」というだけです。「並行処理」とは並行処理は、複数の処理が(少なくとも論理的に)同時に走っていて、処理やイベントが起きるタイミングが任意である、という場合に使います。分散処理の文脈で使われる場合が多いですが、必ずしも分散とは限りません。上記の例で挙げたように、CPUがシングルコアであるような計算機上でマルチタスクOSを走らせる場合を考えてみます。実行している場合を考えます。処理の流れは確実に順番通りに起こります。この時、OSは非常に細かい時間間隔で2つのプロセスを切り替えて交互に実行しています。Aが実行している処理とBが実行している処理の互いの順番は不定となります。いう順番で起こるかもしれません。プログラムが同期を取らない限り、その順番には何の保証もありません。これは、計算機が複数(あるいはマルチコア)のような場合でも全く同じ話ですね。「並列処理」とは並列処理とは、実際に処理が同時に起こっていることを指します。目的は主に計算速度の向上です。1コアのCPUが1つしかない場合には、並列処理には何の意味もないことがわかります(SIMD命令とHyperthreadingを除く)。そのCPUの上で複数プロセスを走らせて計算を分担したとしても、CPUは1つしかないわけですから何の意味もありません。並列とは、計算速度を向上させるために同時に行うという物理的な概念です。例を挙げてみましょう。GCというものがあります。GCとは、Javaなどの言語で使われるガベージコレクションのことです。world」現象を防ぐために、GC処理と本来の処理を細切れにして互い違いに実行することを意味しています。することによって、見た目にはプログラムの処理がStopすることを防ぐことができます。合計の処理時間が変わらない(あるいは伸びる)としても、サーバーなどのインタラクティブ性を確保するために、本来のプログラムの処理と同時に実行することに意義があります。GCはあまり意味がありません。GCは、処理を「真に並列に」実行します。必然的に、同じ処理(例えば、collect処理)を並列に実行することになります。これは、複数の物理プロセッサを同時に使うことによって処理時間の短縮を狙っているわけです。いうわけで、並行と並列の違いについてまとめてみました。2019/01/30不定期に、最近読んだ論文、本、Webページをメモしていきます。はてなブログをはじめよう!keisukefukudaさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。