[OS] Concurrency(並行) 與 Parallelism(平行)

前言

最近在研究Asynchronous Model上一篇介紹了同步、非同步、Blocking、Non-Blocking的觀念及Linux的I/O Model,本篇則要來介紹ConcurrencyParallelism,那就讓我們開始吧。

Concurrency is not Parallelism

"Concurrency is about dealing with lots of things at once. Parallelism is about doing lots of things at once". - Rob Pike

上面這段話是Rob Pike(Golang的開發者之一)在2012年的一個talk時提出來的,他的標題就是Concurrency is not Parallelism (Slide)。

Concurrency(並行):

在同一時間能完成很多事情

以做菜為例,就算只有一個廚師,他還是可以在同時間完成 切菜,準備醬料,主菜等等工作,他會在中間切換來切換去,而不會等到一盤菜好了,再去準備下一排菜。

Parallelism(平行):

同時間有很多Worker做差不多的事情

有兩個廚師分別做自己負責的菜。

如下圖所示:

圖出處: Concurrency vs Parallelism

更多例子

假設現在有兩個任務,

Concurrency vs Parallelism

圖出處: Concurrency is not Parallelism

Reference

  1. 淺談Asynchronous Programming
  2. Concurrency is not Parallelism
  3. [Python] General concepts: concurrency, parallelism, threads and processes
  4. Concurrency vs Parallelism