0

最初のゴルーチンだけを待つのはなぜですか

func Sleep(d Duration)
http://golang.org/pkg/time
"Sleep は現在のゴルーチンを期間 d 一時停止します。"

残りは直接実行されます。チャネルが原因だと思いますが、c chan string両方の動作がわかりません。

私の例

4

1 に答える 1

4

すべての go ルーチンは同時に実行されているため、すべて同時に 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 に答える