Go語(yǔ)言中Goroutine的設(shè)置方式
一、 通過(guò)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)開(kāi)始執(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的使用率:

圖一 未開(kāi)始運(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語(yǔ)言中并發(fā)的工作原理
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
- Go語(yǔ)言Goroutines?泄漏場(chǎng)景與防治解決分析
- Go語(yǔ)言學(xué)習(xí)教程之goroutine和通道的示例詳解
- Go語(yǔ)言使用goroutine及通道實(shí)現(xiàn)并發(fā)詳解
- Go語(yǔ)言中的并發(fā)goroutine底層原理
- Go語(yǔ)言七篇入門(mén)教程四通道及Goroutine
- Go語(yǔ)言之Goroutine與信道異常處理
- Go語(yǔ)言死鎖與goroutine泄露問(wèn)題的解決
- Go語(yǔ)言學(xué)習(xí)之goroutine詳解
- Go語(yǔ)言輕量級(jí)線(xiàn)程Goroutine用法實(shí)例
- Go語(yǔ)言中g(shù)oroutine的使用
相關(guān)文章
Go語(yǔ)言實(shí)現(xiàn)常見(jiàn)限流算法的示例代碼
計(jì)數(shù)器、滑動(dòng)窗口、漏斗算法、令牌桶算法是我們常見(jiàn)的幾個(gè)限流算法,本文將依次用Go語(yǔ)言實(shí)現(xiàn)這幾個(gè)限流算法,感興趣的可以了解一下2023-05-05
一文帶你了解Go語(yǔ)言中鎖特性和實(shí)現(xiàn)
Go語(yǔ)言中的sync包主要提供的對(duì)并發(fā)操作的支持,標(biāo)志性的工具有cond(條件變量)?once?(原子性)?還有?鎖,本文會(huì)主要向大家介紹Go語(yǔ)言中鎖的特性和實(shí)現(xiàn),感興趣的可以了解下2024-03-03
go語(yǔ)言調(diào)用其他包中的函數(shù)簡(jiǎn)單示例
這篇文章主要給大家介紹了關(guān)于go語(yǔ)言調(diào)用其他包中的函數(shù)的相關(guān)資料,文中還介紹了Go語(yǔ)言同一個(gè)包中不同文件之間函數(shù)調(diào)用的相關(guān)問(wèn)題,需要的朋友可以參考下2023-01-01
Go?interface{}?轉(zhuǎn)切片類(lèi)型的實(shí)現(xiàn)方法
本文主要介紹了Go?interface{}?轉(zhuǎn)切片類(lèi)型的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
關(guān)于go-micro與其它gRPC框架之間的通信問(wèn)題及解決方法
在之前的文章中分別介紹了使用gRPC官方插件和go-micro插件開(kāi)發(fā)gRPC應(yīng)用程序的方式,都能正常走通。不過(guò)當(dāng)兩者混合使用的時(shí)候,互相訪(fǎng)問(wèn)就成了問(wèn)題,下面通過(guò)本文給大家講解下go-micro與gRPC框架通信問(wèn)題,一起看看吧2022-04-04
Golang信號(hào)處理及如何實(shí)現(xiàn)進(jìn)程的優(yōu)雅退出詳解
這篇文章主要給大家介紹了關(guān)于Golang信號(hào)處理及如何實(shí)現(xiàn)進(jìn)程的優(yōu)雅退出的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03
Go日常開(kāi)發(fā)常用第三方庫(kù)和工具介紹
這篇文章主要介紹了Go日常開(kāi)發(fā)常用第三方庫(kù)和工具介紹,主要有web開(kāi)發(fā)、數(shù)據(jù)庫(kù)開(kāi)發(fā)、Redis開(kāi)發(fā)需要的朋友可以參考下2022-11-11
GoFrame實(shí)現(xiàn)順序性校驗(yàn)示例詳解
這篇文章主要為大家介紹了GoFrame實(shí)現(xiàn)順序性校驗(yàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06

