Concurrency and Parallelism
Concurrency vs Parallelism
concurrency 是如何拆分程式成多個獨立的工作,讓這些工作可以一起「正在進行(in progress)」但不一定要「同時執行」。「正在進行」是多個工作可以輪流到 CPU(或者 core)上執行,雖然不是同時執行但這些工作都是正在進行中的。而 parallelism 則是多個工作「同時執行」,也就是實際上必須要有多個 core 能同時執行工作。
打個比方,有一個廚師要煮一頓飯,他「同時」(實際上是輪流,廚師不會分身術)洗菜、切菜、炒菜跟煮湯,這是 concurrency,把煮一頓飯分成四個工作。現在廚師會分身術喔不是,是有四個廚師,一個洗菜、一個切菜、一個煮湯、一個炒菜,所有人一起動作就是 parallelism(如果同時間只有一個廚師能動作,不算 parallelism)。煮一頓飯也可以拆成炒青菜、煮飯、煮湯三件事,每件事各自從洗到切到煮或炒,這樣也是一個 concurrency solution,而如果有多個廚師一起做,便成了 parallelism。
concurrency 關乎程式結構,parallelism 關乎程式執行。concurrency 是程式或系統怎麼切分成多個工作,而 parallelism 則得要同時「執行」。
關於中文翻譯
concurrency 的中文翻譯是「並行」,parallelism 是「平行」。但「平行」很容易出現在描述裡,常常搞不清楚到底「平行」是指 parallelism 還是只是一個形容?我比較喜歡在需要精準指出是 concurrency 或 parallelism 的時候用原文,單純的形容或者描述用「平行」,除非英文用在中文句子有點怪才會用中文「並行」跟「平行」並且加註英文。
Ref
- https://blog.golang.org/concurrency-is-not-parallelism
- 《The Art of Concurrency》