0

为什么只等待第一个 goroutine

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

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

我的示例 GoPlayground

4

1 回答 1

4

你所有的 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)  
    }
}

所以他们都在同一时间完成。

于 2012-12-12T23:14:33.827 回答