Neh*_*haJ 1 concurrency time channel go goroutine
这是 Go 代码 https://www.intervue.io/sandbox-ILSCXZ6RR
func worker() chan int {
ch := make(chan int)
go func() {
time.Sleep(3 * time.Second)
ch <- 42
}()
return ch
}
func main() {
timeStart := time.Now()
_, _ = <-worker(), <-worker()
println(int(time.Since(timeStart).Seconds())) // 3 or 6 ?
}
Run Code Online (Sandbox Code Playgroud)
如何在 3 秒内执行而不是在 6 秒内执行?
icz*_*cza 17
需要 6 秒,因为您是从 返回的通道接收worker(),因此在worker()从第一个接收到值之前,无法启动第二个,这需要 3 秒。
您正在使用元组分配。规格: 作业:
任务分两个阶段进行。首先,左边的索引表达式和指针间接(包括选择器中的隐式指针间接)和右边的表达式的操作数都按通常的顺序计算。其次,分配按从左到右的顺序进行。
先启动2个worker,然后从channels接收,这样goroutines才能真正并发运行:
ch1, ch2 := worker(), worker()
_, _ = <-ch1, <-ch2
Run Code Online (Sandbox Code Playgroud)
有了这个,输出将是(在Go Playground上尝试):
3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
176 次 |
| 最近记录: |