关于channel的问题
来源:6-1 channel
寻曜
2021-05-14 15:14:33
老师您好,有几个问题想请教一下
1、
这样执行为什么会报错呢,不是先在channel里面放数据,然后协程在读出来吗
2、
printf是并发打印吗,那为什么这样输出是有序的呢?
1回答
ccmouse
2021-05-15
第一个。往channel放数据的时候必须有人收,不然会在放数据这行阻塞。运行到19行
channels[i]<-'a'+i
的时候,后面的go readChannel还没有运行到,所以没有人收,造成死锁,也就是它报的这个错误。
第二个。好的那我们调整了顺序,先go readChannel。这里的并发,不是因为printf是并发的,而是goroutine是并发的。这里我们看到时顺序打印的,但是理论上不能保证。我们要比开启一个goroutine和print,谁先被调度。事实上我们观测到的都是顺序执行,说明在这几次观测中,print比开启goroutine先调度。但go语言并不保证这一点。并发的代码运行,多种结果都是可能的。
相似问题