Go的併發設定

2021-09-09 05:34:16 字數 617 閱讀 3859

go語言最大的優勢就在於寫高並併發的程式,能很方便的利用goroutine來充分利用系統資源,但估計你用協程寫出的第乙個高併發程式都沒有充分的利用起cpu。最多就跑個100%,這讓我幾十核的cpu情何以堪啊。

因為go預設情況下只用單執行緒。這就是說,你即使開了幾百個goroutine,系統中同一時間在跑的只有乙個執行緒,也就是乙個協程。那是因為沒有設定併發度

runtime.gomaxprocs()//這個函式設定的是go語言跑幾個執行緒。

runtime.numcpu()//這個函式返回當前有的cpu數。

cpu並不知道協程,cpu只認識執行緒,cpu的核心數就是cpu能同時(同乙個時間點)執行的執行緒的數量。協程則會掛在每個執行緒上,goroutine也會適當的調整協程,讓它均勻的掛在每個執行緒上。

一般情況,執行緒的數量建議是cpu核數的2倍。所以我一般會這麼設定:

runtime.gomaxprocs(runtime.numcpu()*2)

Go語言併發

協程 本質上是一種使用者態執行緒,不需要作業系統來進行搶占式排程,且在真正的實現重寄存於執行緒中,因此,系統開銷極小,可以有效提高執行緒的任務併發性,從而避免多執行緒的缺點。使用協程的優點是程式設計簡單,結構清晰 缺點是需要語言的支援。協程最大優勢 輕量級 可以輕鬆建立上百萬個而不會導致系統資源衰竭...

Go 高階併發

譯文出處 譯者 咔嘰咔嘰 校對者 fivezh 如果你曾經使用過 go 一段時間,那麼你可能了解一些 go 中的併發原語 這些語言特性和包組合在一起,為構建高併發的應用程式提供了豐富的工具集。你可能還沒有發現在擴充套件庫 golang.org x sync 中,提供了一系列更高階別的併發原語。我們將...

go總結 併發

主要學習了菜鳥程式設計 go 併發 總結 go func 可以起乙個執行緒,輕量級的執行緒,執行緒之間採用chan進行傳值。package main import fmt func sum s int c chan int c sum 把 sum 傳送到通道 c func main 緩衝區大小為2 ...