Go语言 之GOMAXPROCS
package main import ( "fmt" "runtime" ) func main() { n := runtime.GOMAXPROCS(1) ////打印结果:111111111111111111110000000000000000000011111... n := runtime.GOMAXPROCS(2) //打印结果:010101010101010101011001100101011010010100110... fmt.Println(n) for { go fmt.Print(0) fmt.Print(1) } }
在第一次执行runtime.GOMAXPROCS(1) 时,最多同时只能有一个goroutine被执行。所以会打印很多1。过了一段时间后,GO调度器会将其置为休眠,并唤醒另一个goroutine,这时候就开始打印很多0了,在打印的时候,goroutine是被调度到操作系统线程上的。
在第二次执行runtime.GOMAXPROCS(2) 时, 我们使用了两个CPU,所以两个goroutine可以一起被执行,以同样的频率交替打印0和1。