Go語言中Goroutine的設置方式
一、 通過runtime包進行多核設置
1.NumCPU()獲取當前系統的cpu核數
2.GOMAXPROCS設置當前程序運行時占用的cpu核數
版本1.6之前默認是使用1個核,而之後是全部使用。
好玩的程序:
func doSomething() { var i int for { i++ } } func main() { cpu := runtime.NumCPU() fmt.Println("本機cpu核數:", cpu) fmt.Println("輸入模擬的cpu數:") 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("輸入的數字不正確 err:{0}", err) return } //設置核數 runtime.GOMAXPROCS(num) for i := 0; i < 10; i++ { //做個死循環 go doSomething() } fmt.Println("程序已經開始執行") 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的調度原理復習
之前的記錄 Go語言中並發的工作原理
以上就是這篇文章的全部內容瞭,希望本文的內容對大傢的學習或者工作具有一定的參考學習價值,謝謝大傢對WalkonNet的支持。如果你想瞭解更多相關內容請查看下面相關鏈接