时间。 Sleep 和 Goroutine 执行
在提供的代码中,time.Sleep 函数在启用并发 Goroutine 的执行中起着至关重要的作用。当 time.Sleep 被注释掉时,“世界”goroutine 永远没有机会运行。
这种行为的原因在于 Go 的 goroutine 调度程序的非抢占性。与抢占式调度程序不同,Go 调度程序不会强制当前运行的 goroutine 放弃控制权,除非它们自愿放弃控制权。如果没有 time.Sleep,主 goroutine 会独占控制权,在返回之前完成五次 say("hello") 循环。由于主 goroutine 负责程序的执行,因此程序会立即退出,没有时间给“world” goroutine 执行。
随着 time.Sleep 到位,“world” goroutine 就可以运行 while主 goroutine 正在等待。当主 goroutine 让出控制权来执行 time.Sleep 时,调度程序可以切换到“世界”goroutine,允许它在主 goroutine 恢复之前执行第一次迭代。 Goroutine 之间的这种控制交替确保了两个任务都能完成,从而导致预期的输出“world”和“hello”交替打印到屏幕上。
以上是为什么 `time.Sleep` 在 Go 中启用并发 Goroutine 执行?的详细内容。更多信息请关注PHP中文网其他相关文章!