Go語言中Goroutine的設(shè)置方式
一、 通過runtime包進行多核設(shè)置
1.NumCPU()獲取當(dāng)前系統(tǒng)的cpu核數(shù)
2.GOMAXPROCS設(shè)置當(dāng)前程序運行時占用的cpu核數(shù)
版本1.6之前默認是使用1個核,而之后是全部使用。
好玩的程序:
func doSomething() { var i int for { i++ } } func main() { cpu := runtime.NumCPU() fmt.Println("本機cpu核數(shù):", cpu) fmt.Println("輸入模擬的cpu數(shù):") reader := bufio.NewReader(os.Stdin) buf, _ := reader.ReadBytes('\n') cmdStr := (string)(buf) num, err := strconv.Atoi(strings.Trim(cmdStr, "\r\n")) if err != nil || num > cpu || num <= 0 { fmt.Println("輸入的數(shù)字不正確 err:{0}", err) return } //設(shè)置核數(shù) runtime.GOMAXPROCS(num) for i := 0; i < 10; i++ { //做個死循環(huán) go doSomething() } fmt.Println("程序已經(jīng)開始執(zhí)行") time.Sleep(time.Second * 30) for j := 5; j > 0; j-- { fmt.Printf("程序倒計時退出: %ds...\n", j) time.Sleep(time.Second) } fmt.Printf("程序退出") }
我的電腦是8核的,分別運行1 2 4 8,看下cpu的使用率:
圖一 未開始運行
圖二 運行1個cpu
圖三 運行2個cpu
圖四 運行4個cpu
圖五 運行8個cpu
二、Goroutine的調(diào)度原理復(fù)習(xí)
之前的記錄 Go語言中并發(fā)的工作原理
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
Go?interface{}?轉(zhuǎn)切片類型的實現(xiàn)方法
本文主要介紹了Go?interface{}?轉(zhuǎn)切片類型的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02關(guān)于go-micro與其它gRPC框架之間的通信問題及解決方法
在之前的文章中分別介紹了使用gRPC官方插件和go-micro插件開發(fā)gRPC應(yīng)用程序的方式,都能正常走通。不過當(dāng)兩者混合使用的時候,互相訪問就成了問題,下面通過本文給大家講解下go-micro與gRPC框架通信問題,一起看看吧2022-04-04Golang信號處理及如何實現(xiàn)進程的優(yōu)雅退出詳解
這篇文章主要給大家介紹了關(guān)于Golang信號處理及如何實現(xiàn)進程的優(yōu)雅退出的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03