为什么Goroutine可以在繁忙循环后安排?

为什么Goroutine可以在繁忙循环后安排?,go,scheduling,goroutine,Go,Scheduling,Goroutine,请参见下面的代码我不是在任何制作中这样做,只是为了学习。 我从许多海报上听说,繁忙的循环通常会阻止调度,因为它们没有给go调度程序留下任何机会。如果这是真的,为什么deadloop()goroutine可以被调度 我正在使用golang 1.12并在windows操作系统上进行测试 func main() { go deadloop() // v1 -- keeps printing forever var i =1 for { i+

请参见下面的代码我不是在任何制作中这样做,只是为了学习。

我从许多海报上听说,繁忙的循环通常会阻止调度,因为它们没有给go调度程序留下任何机会。如果这是真的,为什么deadloop()goroutine可以被调度

我正在使用
golang 1.12
并在windows操作系统上进行测试

func main()  {

    go deadloop()         // v1 -- keeps printing forever

    var i =1
    for {
        i++
    }
}

func deadloop() {
    i := 0
    for {
        fmt.Printf("from deadloop\n")
        i++
    }
}
更新:
我很困惑,所以我没有用更清楚的方式来回答这个问题。我今天更改了内容,但我仍然有相同的问题。

根据@Cerise的回答,这是因为您的
main
函数中的
for
循环很忙。如果循环的目的是防止退出
main
,则不要对
使用
,而是使用
select
。见下面的代码:

func main(){
陷入死循环2()

选择{}//main中的忙循环一旦开始运行,可能不会向其他goroutine屈服。请将忙循环替换为
select{}
,以获得预期的结果。