下一个goroutine执行时?

时间:2017-04-03 09:23:51

标签: go goroutine

我正在查看https://blog.golang.org/pipelines中的示例:

func main() {
    in := gen(2, 3)

    // Distribute the sq work across two goroutines that both read from in.
    c1 := sq(in)

    // When does this line below execute and what is in `in`?
    c2 := sq(in)

    // Consume the merged output from c1 and c2.
    for n := range merge(c1, c2) {
        fmt.Println(n) // 4 then 9, or 9 then 4
    }
}

c2 := sq(in)什么时候开始?正如我所理解的那样,它不会在前一行完成时执行,而是立即执行,因为这是一个goroutine。

c2收到c1收到的邮件后,int fact(int x) { if(x!=1) return x*fact(x-1); return 1; } 会收到下一条收到的邮件吗?

1 个答案:

答案 0 :(得分:0)

您的代码不使用goroutines,为了使用go例程,您应该执行以下操作:

q := make(chan type) 
go sq(in, q)
go sq(in, q)

for elem := range q {
    fmt.Println(elem)
}

和sq必须通过通道返回值

func sq(in type, q chan type) {
     ...
     q <- valueFromIn
     ...
}

此外,您可以使用WaitGroup等待goroutines完成。