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。

posted @ 2019-07-04 09:56  样子2018  阅读(1318)  评论(0编辑  收藏  举报