iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 20
1
Software Development

Golang入門到進階實戰系列 第 20

Day20 Concurrency vs Parallelism

Concurrency並發與Parallelism並行

定義

以生活化的例子舉例,並發性指的是你把一個事情拆成許多子任務,例如整理儀容,你需要刷牙、洗臉和剃須,每件事情都完成時你的儀容才算整理完畢,這叫並發性。並行性指的是你同時做很多事,每件事情彼此不相千,就像邊洗澡邊聽音樂,或是邊吃早餐邊看新聞,這叫並行性。

“Concurrency is about dealing with lots of things at once. Parallelism is about doing lots of things at once.” — Rob Pike

concurrency

https://ithelp.ithome.com.tw/upload/images/20191005/20120698VOaEb1GAl3.png
從技術面來看,Multi-thread,多線程(多執行緒)程式會把一個工作拆分成數個子任務,並利用好幾個thread同時運行子任務。

parallelism

https://ithelp.ithome.com.tw/upload/images/20191005/20120698Fdeno8Zaiu.png
各自完成不同的工作,彼此之間不共享資源,使用情境: Load balancing,負載平衡機制,為了分散伺服器負擔,架設了多個伺服器,並將用戶平均分配到各自伺服器上。

並發性是程式的一種屬性,其中兩個或多個任務可以同時執行,並行性是兩個或多個任務同時運行時的屬性。並發可以使用並行來完成它的工作,請記住並行不是並發的最終目標。

Goroutine

在Go語言中,並發性是通過Goroutines實現的,Goroutines是可以與其他方法或函數並發運行的函數或方法。它們與java中的線程非常相似,但重量很輕,創建它們的成本也很低。

Goroutines相對於線程的優勢包括:

  • 啟動時間比線程快
  • 帶有內置的原語,可以在Goroutine之間作為通道安全的通信。
  • 與線程相比非常輕量,它們的堆棧大小只有幾個kb,堆棧可以根據 應用程序的需要增長和收縮。

上一篇
Day18 平行運算concurrency
下一篇
Day21 進程 線程與協程
系列文
Golang入門到進階實戰30

尚未有邦友留言

立即登入留言