首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么time.sleep需要运行特定的峡谷呢?

为什么time.sleep需要运行特定的峡谷呢?
EN

Stack Overflow用户
提问于 2013-04-02 18:11:14
回答 3查看 21.3K关注 0票数 35

在GO教程中,我们有以下幻灯片:戈鲁廷斯

代码语言:javascript
复制
package main

import (
    "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"行)并再次运行程序,则只剩下只在屏幕上写了5次 "hello“。

time.Sleep有什么重要的,能让它免于死亡呢?

EN

Stack Overflow用户

回答已采纳

发布于 2013-04-02 18:27:12

如果删除time.Sleep,就不会给say("world") goroutine一个运行的机会。goroutine调度程序不是抢占性的。你的猩猩必须放弃控制,否则另一个峡谷将运行。放弃控制的一种方法是运行time.Sleep

如果您从time.Sleep函数中取出say,那么主goroutine运行5次,而不放弃对次要goroutine的控制,然后当主goroutine从say返回时,程序退出,因为没有什么可以使程序存活。

票数 41
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15771232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档