Go语言-runtime.GOMAXPROCS
什么是runtime.GOMAXPROCS
NumCPU
runtime 调度器是个非常有用的东西,关于 runtime 包几个方法:
- Gosched:让当前线程让出 cpu 以让其它线程运行,它不会挂起当前线程,因此当前线程未来会继续执行
- NumCPU:返回当前系统的 CPU 核数量
- GOMAXPROCS:设置最大的可同时使用的 CPU 核数
- Goexit:退出当前 goroutine(但是defer语句会照常执行)
- NumGoroutine:返回正在执行和排队的任务总数
- GOOS:目标操作系统
package main
import (
"fmt"
"runtime"
)
func main() {
fmt.Println("cpus:", runtime.NumCPU())
fmt.Println("goroot:", runtime.GOROOT())
fmt.Println("archive:", runtime.GOOS)
}
GOMAXPROCS
runtime.GOMAXPROCS
该函数的作用是设置当前进程使用的最大cpu数,返回值为上一次调用成功的设置值。
/**
GOMAXPROCE
调用runtime.GOMAXPROCS()用来设置可以并行计算cpu核数的最大值
并返回之前的值。默认值所有机器核数
*/
package main
import (
"fmt"
"runtime"
)
func main(){
//设置cpu最大核数
n:=runtime.GOMAXPROCS(1)
fmt.Println("之前核数=",n)
for{
//两个协程抢着输出 0,1;观察01交替密度来观察;核数越大,交替越密
go fmt.Print(0)
fmt.Print(1)
}
}
GOMAXPROCS 同时也是一个环境变量,在应用程序启动前设置环境变量也可以起到相同的作用。
Go 1.5 版本之前,默认使用的是单核心执行。从 Go 1.5 版本开始,默认执行上面语句以便让代码并发执行,最大效率地利用 CPU。
从 Go 1.5 版本开始,即默认使用所有cpu的,非特殊情况不需要改。Go默认执行使用的CPU核心数为系统CPU最大核心
参考
Golang中runtime的使用详解
https://www.jb51.net/article/168802.htm
Go语言GOMAXPROCS(调整并发的运行性能)
参考URL: http://c.biancheng.net/view/94.html