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