iT邦幫忙

2021 iThome 鐵人賽

DAY 6
0
自我挑戰組

golang 後端菜雞工程師學習雜記系列 第 6

Day6 - 讀 Concurrency is not Parallelism - Rob Pike (一)

  • 分享至 

  • xImage
  •  

本篇是看 Concurrency is not Parallelism 的心得

Yes

Concurrency is not Parallelism - Rob Pike 藉由 Parallelism 的對比,來講解什麼是 Concurrency.

什麼是 Concurrency?

Programming as the composition of independently excuting process. (此 process 非 linux process,它是更廣義的)

Concurrency 的重點放在各個不相依 process 的組合

什麼是 Parallelism?

Programming as the simultaneous execution of (possibly related) computation.

Parallelism 的重點是有多個同時執行的運算。


到這我也還不懂 Rob Pike 想說什麼?
接著 Rob Pike 放到下一頁投影片
https://ithelp.ithome.com.tw/upload/images/20210907/20140148SvLHZaFSKE.png

這時候我開始懂了,concurrency 指的是一種程式架構,也是一種思考方式,也可以說是解決問題的一種方式。Rob Pike 馬上舉出了一個例子:OS 可以同時 (這裡的同時是指 concurrent) 管理的滑鼠,鍵盤,螢幕,並且正常的運作,這就是一個 concurrent 的設計的實際例子,但請注意:一個 OS 不一定要同時 (Parallel) 管理這些設備,這台電腦可以是單核心的。這句話很玄,但也和投影片上所說的相互呼印, Concurrency provides a way to structure a solution to solve a problem that may (but not necessarily) be parallelizable.,cocurrent 提供了解決問題的方法,這解決問題的方法可以是 parallel。


這邊我在 jserv 的文章也找到了更好的解釋 Toward Concurrency

Concurrency 是指程式架構,將程式拆開成多個可獨立運作的工作,像是驅動程式都可獨立運作,但不需要平行化

  • 拆開多個的工作不一定要同時運行
  • 多個工作在單核心 CPU 上運行

Parallelism 是指程式執行,同時執行多個程式。Concurrency 可能會用到 parallelism,但不一定要用 parallelism 才能實現 concurrency。eg:Vector dot product

  • 程式會同時執行 (例如:fork 後,同時執行,再收集結果 [join])
  • 一個工作在多核心 CPU 上運行

Go 提供了一套 concurrent 的工具,這工具就是 goroutine 和 channel,我猜 Rob Pike 想說的是,你應該要 think concurrency,有了這個思考模式加上 go 提供的工具,將會設計出更有效率的程式。

我想這也是 go 的設計方法之一:只要有辦法把一個程式執行,拆分成幾個不相依的執行個體,你就可以使用 goroutine 加上 channel 設計出 concurrent 的程式。

明日的文章,就把這影片的後半段的程式實例讀一讀寫個心得。


上一篇
Day5 休息一日思考下一步
下一篇
Day7 - 讀 Concurrency is not Parallelism - Rob Pike (二)
系列文
golang 後端菜雞工程師學習雜記18
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言