【问题标题】:Parallelisation - Why does sleep pause only once?并行化 - 为什么睡眠只暂停一次?
【发布时间】:2012-11-30 17:46:58
【问题描述】:

为什么只等待第一个 goroutine

func Sleep(d Duration)
http://golang.org/pkg/time
“睡眠暂停当前的 goroutine 持续时间 d。”

但其余部分直接执行。我认为导致频道c chan string,但我不了解两者之间的行为。

My Example GoPlayground

【问题讨论】:

    标签: parallel-processing go goroutine


    【解决方案1】:

    你所有的 goroutine 都是同时运行的,所以它们都同时休眠 4 秒,因此它们都同时结束。

    你这样称呼他们。 go 表示所有getHostName 函数同时运行。

    for i := 0; i < max; i++ {
        go getHostName(haveHost, ipadresse_3, i)
    }
    

    这意味着所有的睡眠同时发生

    func getHostName(h chan string, ipAdresse string, n int) {
    
        //Here!!!
        time.Sleep(4 * time.Second)
        ip := ipAdresse + strconv.Itoa(n)
    
        //ip, ok := net.LookupAddr(ip)
    
        if false {
            h <- ip + " - "
        } else {
            h <- "error" + strconv.Itoa(n)  
        }
    }
    

    所以他们都同时完成。

    【讨论】:

    • 是的,你说得对,但为什么第一个 goRoutine 睡眠而其余的例程等待它?
    • 好的,我明白了。似乎 goRoutines 正在等待它,但实际上时间已经流逝了一次并发“时刻”,对吗?
    • 召集四个人,让他们等四秒钟,然后说点什么。会发生什么?
    猜你喜欢
    • 2019-09-26
    • 2011-11-22
    • 2021-04-12
    • 1970-01-01
    • 2012-10-10
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多