最赞回答 / 根号三百万
向channel写入或者读取数据都是阻塞的,不开goroutine的话代码上面的代码就阻塞在 out <- r , 当然就死锁了。开gouroutine的话应该不会吧,你可以贴下代码看看
2018-10-31
最新回答 / Liu_HongYe
哦,我懂了,在InMemSort中, 数据没有处理完, chan是没有close的, 那么这个chan就会阻塞掉, 一直不会把监听的数据准备好.
2018-09-04
最赞回答 / 慕粉329807310
11分45秒的时候老师解释了,createPipeline只是创建了pipeline,也就是把一个文件分成了chunkCount个小快,各放上了一个channel,但是此时channel还是阻塞的,因为要等触发了ReadSource以后才这些通道才会开始不断传输。因此在CreatePipeline里面是不能file.close的,需要把这些file句柄返回出来,由外面close。老师说因为不想把这个示例搞的太复杂,所以就留下了这个坑。
2018-08-20
最新回答 / tokumi
defer的效果是从最后向前依次执行需要defer的语句,也就说需要defer操作的引用都会被存储在一个栈空间。在栈空间里file指向的地址还是不同的地址,因此可以解决这个问题。猜测是这样,并没有实际证据。
2018-08-20
最赞回答 / haoyun666
只有一个ready,那么第二个在读取的时候会一直被等待呀,等到能读取。如果其中一个读数据不ok,那么证明已经关闭了数据读取完了,这是就拍另一个就行了。所以没有问题。
2018-07-30