Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parallel processing 并行化-为什么睡眠只暂停一次?_Parallel Processing_Go_Goroutine - Fatal编程技术网

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

Parallel processing 并行化-为什么睡眠只暂停一次?,parallel-processing,go,goroutine,Parallel Processing,Go,Goroutine,为什么只等第一次和你一起出游 func睡眠(d持续时间) “睡眠会在持续时间d内暂停当前goroutine。” 但剩下的是直接执行。我想是因为频道c chan string造成的,但我不理解两者之间的行为 您的所有围棋程序都同时运行,因此它们都会同时休眠4秒,因此它们都会在同一时间结束 你这样称呼他们。go意味着所有的getHostName函数同时运行 for i := 0; i < max; i++ { go getHostName(haveHost, ipadresse_3,

为什么只等第一次和你一起出游

func睡眠(d持续时间)


“睡眠会在持续时间d内暂停当前goroutine。”

但剩下的是直接执行。我想是因为频道
c chan string
造成的,但我不理解两者之间的行为


您的所有围棋程序都同时运行,因此它们都会同时休眠4秒,因此它们都会在同一时间结束

你这样称呼他们。
go
意味着所有的
getHostName
函数同时运行

for i := 0; i < max; i++ {
    go getHostName(haveHost, ipadresse_3, i)
}
i:=0的
;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)  
    }
}
func getHostName(h chan字符串、ipadrese字符串、n int){
//这里!!!
时间。睡眠(4*时间。秒)
ip:=ip地址+strconv.Itoa(n)
//ip,ok:=net.LookupAddr(ip)
如果错误{

你所有的围棋程序都是同时运行的,因此它们都会在同一时间睡眠4秒钟,因此它们都会在同一时间结束

您这样调用它们。
go
意味着所有
getHostName
函数同时运行

for i := 0; i < max; i++ {
    go getHostName(haveHost, ipadresse_3, i)
}
i:=0;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)  
    }
}
func getHostName(h chan字符串、ipadrese字符串、n int){
//这里!!!
时间。睡眠(4*时间。秒)
ip:=ip地址+strconv.Itoa(n)
//ip,ok:=net.LookupAddr(ip)
如果错误{

是的,你是正确的,但是为什么第一个goRoutine睡眠和其他例程要等待它呢?好的,我明白了。看起来goRoutine在等待它,但事实上,时间一次又一次地流逝是吗?让四个人聚在一起,让他们等四秒钟,然后说些什么。会发生什么?是的,你说得对,但为什么第一次goRoutine睡眠和其他例行程序都要等它呢?好的,我明白了。看起来goRoutine在等它,但事实上,时间是一次又一次的“瞬间”是吗?让四个人聚在一起,让他们等四秒钟,然后说点什么。会发生什么?