Go語言中Goroutine的設(shè)置方式
一、 通過runtime包進(jìn)行多核設(shè)置
1.NumCPU()獲取當(dāng)前系統(tǒng)的cpu核數(shù)
2.GOMAXPROCS設(shè)置當(dāng)前程序運(yùn)行時占用的cpu核數(shù)
版本1.6之前默認(rèn)是使用1個核,而之后是全部使用。
好玩的程序:
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++ {
//做個死循環(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核的,分別運(yùn)行1 2 4 8,看下cpu的使用率:

圖一 未開始運(yùn)行

圖二 運(yùn)行1個cpu

圖三 運(yùn)行2個cpu

圖四 運(yùn)行4個cpu

圖五 運(yùn)行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語言中的網(wǎng)絡(luò)編程實(shí)現(xiàn)方式
Go語言作為一種簡潔而強(qiáng)大的編程語言,在網(wǎng)絡(luò)編程方面表現(xiàn)尤為出色,其內(nèi)置的net包提供了豐富的網(wǎng)絡(luò)I/O基礎(chǔ)設(shè)施,支持TCP、UDP協(xié)議,以及DNS解析等功能,本文將結(jié)合實(shí)際案例,詳細(xì)介紹Go語言在網(wǎng)絡(luò)編程中的詳細(xì)用法,需要的朋友可以參考下2024-10-10
Go語言實(shí)現(xiàn)機(jī)器大小端判斷代碼分享
這篇文章主要介紹了Go語言實(shí)現(xiàn)機(jī)器大小端判斷代碼分享,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-10-10
Go?處理大數(shù)組使用?for?range?和?for?循環(huán)的區(qū)別
這篇文章主要介紹了Go處理大數(shù)組使用for?range和for循環(huán)的區(qū)別,對于遍歷大數(shù)組而言,for循環(huán)能比for?range循環(huán)更高效與穩(wěn)定,這一點(diǎn)在數(shù)組元素為結(jié)構(gòu)體類型更加明顯,下文具體分析感興趣得小伙伴可以參考一下2022-05-05

