併發與協程
併發與協程
並行Parallel 是利用多個 CPU 達到同時並行處理任務的需求
併發Concurrent 是許多任務在爭搶同一個 CPU 的資源,切換非常快,使用者通常不會感覺到任務實際上一直在切換。
程式(Application )>>進程( Process )
線程/執行緒( Thread ):由系統面 CPU 內核去進行調度
協程( Coroutine ):調度由程式面用戶控制
Go 的併發:Goroutine
goroutine 是一種"go的協程",與其他語言的協程類似,不須yield 和 resume,而是用channel來通信。
Go runtime 會負責調度,會把發生阻塞的goroutine調度走,可以在有限CPU下做有效的利用。
GOMAXPROCS: 預設是CPU用到的最大核心數量,N個goruntine會對應到M個thread上
Goroutines又稱輕量級線程,開一個gorountine默認只需2~4KB的空間,相較於thread是MB級的空間,開銷小。
Last updated