Golang併發、協程
並行(parallel):指在同一時刻,有多條指令在多個處理器上同時執行。
併發(concurrency):指在同一時刻只能有一條指令執行,但多個程序指令被快速的輪換執行,使得在巨集觀上具有多個程序同時執行的效果,但在微觀上並不是同時執行的,只是把時間分成若干段,使多個程序快速交替的執行。
goroutine
goroutine是比執行緒更小的工作單元,go語言內部實現了goroutine之間的記憶體共享,它比thread更易用、更高效、更輕便。
建立goroutine
只需要在函式呼叫語句前新增"go"關鍵字,就可以建立併發執行單元。當一個程式啟動時,其主函式即在一個單獨的goroutine中執行,稱為main goroutine。當主協程結束的時候,子協程也會自動結束。
Gosched
runtime包的方法,讓出時間片,讓其它協程先執行
Goexit
runtime 包的方法,終止所在協程
GOMAXPROCS
runtime包的方法,獲取最大核心數,指定使用核心數
channel
channel是內建的資料結構,用於讀取傳送資料,無資料時,讀取資料會阻塞,設定了最大寫入資料時,寫滿capacity個元素時,寫入阻塞。
channel建立
make(chan Type)
make(chan Type, capacity)
channel讀寫
ch <- 666
<- ch
無緩衝的channel
make(chan Type)
make(chan Type,0)
有緩衝的channel
是一種在被接受前能儲存一個或多個值得channel
make(chan Type,3)
單向channel
var send chan<- int
var receiver <-chan int