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在等它,但事实上,时间是一次又一次的“瞬间”是吗?让四个人聚在一起,让他们等四秒钟,然后说点什么。会发生什么?