比如下面的程序
package main
import "fmt"
func main() {
ch := make(chan int)
go hello(ch)
go world(ch)
fmt.Println(<-ch, <-ch)
}
func hello(ch chan int) {
ch<-5
}
func world(ch chan int){
ch<-10
}
有时候输出是 5 10 有时候是 10 5
我是否可以这样理解,hello()跟 world()两个函数是同时执行的,有时候是 hello 先执行完,然后 ch 阻塞,ch 的值就被读取然后放在 Println 的第一个 ch 位置上,然后阻塞解除,之后 world 也向 channel 写入了数据阻塞,然后 ch 又把值读取到了 Println 的第二个 ch 的位置上。
输出结果不同就是因为两个程序执行的速度不同导致的。