为什么Goroutine可以在繁忙循环后安排?
请参见下面的代码我不是在任何制作中这样做,只是为了学习。 我从许多海报上听说,繁忙的循环通常会阻止调度,因为它们没有给go调度程序留下任何机会。如果这是真的,为什么deadloop()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+
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{}
,以获得预期的结果。