调度到达时机

程序到达调度的时机 #

猜猜这个程序的运行结果

package main
import (
    "fmt"
    "runtime"
)
func g1() {
    sum := -1
    for {
        sum++
    }
}
func main() {
    runtime.GOMAXPROCS(0)
    go g1()
    for {
        runtime.Gosched() //如果注释掉这一行,将会在开始时候打印,后面不会再打印
        fmt.Println("main is scheduled!")
    }
}
  • 将不会打印[“main is scheduled!”]

调度时机 #

调度时机: 主要是什么时候发生调度:

  • 主动调度
  • 被动调度
  • 剥夺调度
    • 运行时间过长
    • 系统调用被剥夺P

goroutine调度时机总结