并行化 - 为什么睡眠暂停一次?

时间:2012-12-12 22:16:30

标签: parallel-processing go goroutine

为什么只用

等第一个goroutine

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

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

My Example GoPlayground

1 个答案:

答案 0 :(得分:4)

所有你的例程都在同时运行,所以他们同时睡了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)  
    }
}

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