1 并行和并發(fā)
并行(parallel):指在同一時刻,有多條指令在多個處理器上同時執(zhí)行。
并發(fā)(concurrency):指在同一時刻只能有一條指令執(zhí)行,但多個進程指令被快速的輪換執(zhí)行,使得在宏觀上具有多個進程同時執(zhí)行的效果,但在微觀上并不是同時執(zhí)行的,只是把時間分成若干段,使多個進程快速交替的執(zhí)行。
并行是兩個隊列同時使用兩臺咖啡機
并發(fā)是兩個隊列交替使用一臺咖啡機
2 Go語言并發(fā)優(yōu)勢
有人把Go比作21世紀的C語言,第一是因為Go語言設計簡單,第二,21世紀最重要的就是并行程序設計,而Go從語言層面就支持了并行。同時,并發(fā)程序的內(nèi)存管理有時候是非常復雜的,而Go語言提供了自動垃圾回收機制。
Go語言為并發(fā)編程而內(nèi)置的上層API基于CSP(communicating sequential processes, 順序通信進程)模型。這就意味著顯式鎖都是可以避免的,因為Go語言通過相冊安全的通道發(fā)送和接受數(shù)據(jù)以實現(xiàn)同步,這大大地簡化了并發(fā)程序的編寫。
一般情況下,一個普通的桌面計算機跑十幾二十個線程就有點負載過大了,但是同樣這臺機器卻可以輕松地讓成百上千甚至過萬個goroutine進行資源競爭。
3 參考資料
1)https://www.zhihu.com/question/33515481
2)Go語言程序設計(programming in go):https://pan.baidu.com/s/1dGgM7jb