以下测试,使用的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.