1 含义
Go调度器(scheduler)用来决定Go例程最多可以在多少个线程上执行,在m:n调度机制里面,GOMAXPROCS就是那个n。
2 默认值
操作系统CPU数
3 哪些任务不需要占用线程
- sleeping的Go例程
- 由于通信阻塞的Go例程
4 哪些任务需要占用线程
- 阻塞在I/O或其他系统调用的Go例程
- 调用非Go函数的例程,如CGO
- 一般的活跃Go例程
其中,前两种任务虽然占用线程,但并不计算在GOMAXPROCS内
5 如何修改
5.1 运行时指定环境变量
GOMAXPROCS=2 go run test.go
5.2 使用runtime.GOMAXPROCS函数
该函数将Go调度器可以同时使用的操作系统线程数设置为指定值,并
返回之前的值
func main() {
fmt.Println(runtime.GOMAXPROCS(2))
for {
go fmt.Print("0")
fmt.Print("1")
}
}
当GOMAXPROCS被设置为1时,由于同时只能有一个Go例程被调度,因此上述程序会打印一段1,然后打印一段0,类似:
1111100000111110000
而如果GOMAXPROCS被设置为大于1的值,则两个Go例程会被同时调度,因此上述程序会交替打印1和0,类似:
1010101010
版权声明:本文为m0_37554486原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。