Concurrency in Go Chapter2(1)

“Concurrency in Go: Tools and Techniques for Developers”の2章 “Modeling Your Code: Communicationg Sequential Processes”の読書メモと補足 。

※ ”concurrent”は「並行」、”parallel”は「並列」と訳されることが多いと思うが、訳しても似すぎていてややこしいのでそのままの表記にする。

ConcurrencyとParallelismの違い

Concurrencyはコードの特性であり、Parallelismはプログラムのランタイムの特性である。Parallelismは同一時間に実行されることを指す。プログラムがParallelに動くかどうかは実行環境に依存している。(コードだけを見てもParallelに実行されるプログラムだと判断できない)シングルコアの環境でConcurrentなコードを実行したとしても、Parallelに動かず、逐次的に動くということである。

Concurrencyの例

タスク1とタスク2が存在するとする。Aさんがタスク1を10分実行し、その後タスク2を10分実行し、またその後タスク1を10分実行するなどのように、1人が複数のタスクを切り替えていく場合、タスクがConcurrentに実行されたと言える。

Parallelismの例

AさんとBさん、タスク1とタスク2が存在するとする。Aさんがタスク1を、Bさんがタスク2を同時に実行する場合、タスクがParallelに実行されたと言える。

補足

  • Rob Pike — ‘Concurrency Is Not Parallelism’

Rob Pikeさんの有名な動画。

  • Rebuild: 158: Kill All The Threads (ko1, Matz)

まつもとゆきひろさんと笹田耕一さんの回。Rubyで今後実装されるGuildの説明をする際に、ConcurrencyとParallelismに関する話があった。

Software engineer

Software engineer