为了账号安全,请及时绑定邮箱和手机立即绑定

为什么需要 time.sleep 来运行某些 goroutines?

为什么需要 time.sleep 来运行某些 goroutines?

Go
慕虎7371278 2021-06-03 13:05:39
在 GO 教程中,我们有这张幻灯片:Goroutinespackage mainimport (    "fmt"    "time")func say(s string) {    for i := 0; i < 5; i++ {        time.Sleep(100 * time.Millisecond)        fmt.Println(s)    }}func main() {    go say("world")    say("hello")}运行此代码会产生预期的结果(“world”和“hello”交替写入屏幕 5 次)。然而,如果我们注释掉time.Sleep(因此,"time"导入的行)并再次运行程序,我们只剩下“hello”写在屏幕上五次。是什么让time.Sleepgoroutine 免于死亡如此重要?
查看完整描述

3 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

如果您删除 ,time.Sleep则不会给say("world")goroutine 运行的机会。goroutine 调度器不是抢占式的。在另一个 goroutine 运行之前,你的 goroutine 必须放弃控制。放弃控制的一种方法是运行time.Sleep.

如果time.Sleepsay函数中取出 ,则主 goroutine 运行 5 次而不会放弃对辅助 goroutine 的控制,然后当主 goroutine 从say程序返回时退出,因为没有任何东西可以使程序保持活动状态。


查看完整回答
反对 回复 2021-06-07
  • 3 回答
  • 0 关注
  • 277 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信