(并发编程新手)有疑问为什么 goroutine 的执行流程在这里有点奇怪?golang 中 goroutine 和通道的初学者。func main() { // Set up the pipeline. c := gen(2, 3) out := sq(c) // Consume the output. fmt.Println(<-out) // 4 fmt.Println(<-out) // 9}func sq(in <-chan int) <-chan int { out := make(chan int) go func() { for n := range in { out <- n * n } close(out) }() return out}func gen(nums ...int) <-chan int { out := make(chan int) go func() { for _, n := range nums { out <- n } close(out) }() return out}
1 回答
翻过高山走不出你
TA贡献1875条经验 获得超3个赞
一旦调用gen
和sq
完成,就会有 3 个 goroutine 同时运行。它们在通道之间传递数据,因此执行会产生相同的结果。
根内
内方
主要的
他们总是传递至少 2 条信息,因此按以下顺序运行代码
gen-inner
out <- n
-2-> sq-innerout <- n * n
-4-> mainprintln(<-out)
gen-inner
out <- n
-3-> sq-innerout <- n * n
-9-> mainprintln(<-out)
还可能发生第三遍,但它可能会在main
goroutine 结束时被跳过。
gen-inner
close()
-close-> sq-innerclose(out)
-close->
- 1 回答
- 0 关注
- 91 浏览
添加回答
举报
0/150
提交
取消