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
5.2 使用函数
该函数将Go调度器可以同时使用的操作系统线程数设置为指定值,并返回之前的值
func main() {
((2))
for {
go ("0")
("1")
}
}
当GOMAXPROCS被设置为1时,由于同时只能有一个Go例程被调度,因此上述程序会打印一段1,然后打印一段0,类似:
1111100000111110000
而如果GOMAXPROCS被设置为大于1的值,则两个Go例程会被同时调度,因此上述程序会交替打印1和0,类似:
1010101010