为了账号安全,请及时绑定邮箱和手机立即绑定

给定代码的执行流程将如何?go 例程在这里将如何执行?

给定代码的执行流程将如何?go 例程在这里将如何执行?

Go
慕尼黑8549860 2023-07-31 16:56:44
(并发编程新手)有疑问为什么 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个赞

一旦调用gensq完成,就会有 3 个 goroutine 同时运行。它们在通道之间传递数据,因此执行会产生相同的结果。

  1. 根内

  2. 内方

  3. 主要的

他们总是传递至少 2 条信息,因此按以下顺序运行代码

  1. gen-inner out <- n-2-> sq-inner out <- n * n-4-> mainprintln(<-out)

  2. gen-inner out <- n-3-> sq-inner out <- n * n-9-> mainprintln(<-out)

还可能发生第三遍,但它可能会在maingoroutine 结束时被跳过。

  1. gen-inner close()-close-> sq-inner close(out)-close->


查看完整回答
反对 回复 2023-07-31
  • 1 回答
  • 0 关注
  • 60 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信