Ida*_*dan -2 channel go goroutine
考虑以下来自go 之旅的示例。
如何确定频道的接收顺序?为什么 x 总是从 gorouting 获得第一个输出?这听起来很合理,但我没有找到任何关于它的文档。我尝试添加一些睡眠,但仍然从第一次执行的 gorouting 中获取输入。
    c := make(chan int)
    go sumSleep(s[:len(s)/2], c)
    go sum(s[len(s)/2:], c)
    x, y := <-c, <-c // receive from c
    fmt.Println(x, y, x+y)
睡眠是在发送到通道之前。
消息总是按照发送的顺序接收。那是确定性的。
然而,跨越并发够程任何操作的执行顺序是不确定性的。因此,如果您有两个 goroutine 同时在一个通道上发送,您将无法知道哪个先发送,哪个再发送。如果您有两个 goroutine 在同一个频道上接收,则相同。