以下測試,使用的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核數。