Golang cpu的使用設置--GOMAXPROCS


以下測試,使用的Go版本是1.8.3

不設置

如果沒有調用runtime.GOMAXPROCS 去設置CPU,Golang默認使用所有的cpu核。

測試機器CPU有4個核,測試代碼開啟4個goroutine,從測試結果看4個核心全部跑滿。

測試代碼如下:

package main

func main()  {
	go task()
	go task()
	go task()
	go task()

	select{}

}


func task(){

	for {	
	
	}

}

設置CPU使用

func GOMAXPROCS(n int) int

GOMAXPROCS sets the maximum number of CPUs that can be executing simultaneously and returns the previous setting. If n < 1, it does not change the current setting.

設置並發執行時使用的CPU的數目

例如,設置只使用1個核心

runtime.GOMAXPROCS(1)

設置只使用2個核心

runtime.GOMAXPROCS(2) 

測試代碼如下,只設置一個核心:

package main

import (
	"runtime"
)

func main()  {
    runtime.GOMAXPROCS(1)
	go task()
	go task()
	go task()
	go task()

	select{}
}


func task(){
	for {	
	
	}
}

有時候,我們常用到:

runtime.GOMAXPROCS(runtime.NumCPU())

func NumCPU() int
NumCPU returns the number of logical CPUs usable by the current process.

函數返回當前進程可用的邏輯CPU數目

目前測試下來,使用這個設置CPU,效果和不調用GOMAXPROCS效果一樣,就是使用所有的CPU核心數。

2020.1.1 補充更新

最新測試結果:

測試機器:MAC CPU 8核
版本:go version go1.13 darwin/amd64

1.不使用GOMAXPROCS 設置CPU
8 個goroutine,可以跑滿8個核, CPU使用最高達到800%

2.使用GOMAXPROCS 設置CPU
8 個goroutine
- 設置只使用1個核, CPU使用最高達到100%
- 設置只使用2個核,CPU使用最高達到200%

也就是說GOMAXPROCS可以用來設置程序使用的最多CPU核數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM