【发布时间】:2019-12-03 05:00:08
【问题描述】:
请参阅下面的这些代码。 我不会在任何作品中这样做,只是为了学习目的。
我从许多发帖者那里听说忙循环通常会阻止调度,因为它们没有给 go sheduler 留给调度器的机会。如果这是真的,为什么 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++
}
}
更新: 我很困惑,所以我没有用更清楚的方式来解决这个问题。今天改了内容,还是有同样的疑问。
【问题讨论】:
-
main 中的繁忙循环一旦开始运行,可能不会让给其他 goroutines。将繁忙的循环替换为
select {}以获得您期望的结果。
标签: go scheduling goroutine