前言
最近在研究Asynchronous Model
,上一篇介紹了同步、非同步、Blocking、Non-Blocking
的觀念及Linux的I/O Model
,本篇則要來介紹Concurrency
與Parallelism
,那就讓我們開始吧。
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: 一個CPU中兩個任務交互執行
圖出處: [Python] General concepts: concurrency, parallelism, threads and processes
Parallelism: 有兩個CPU,兩個任務個分配到其中之一同時執行
圖出處: [Python] General concepts: concurrency, parallelism, threads and processes
Concurrency vs Parallelism
圖出處: Concurrency is not Parallelism