最贊回答 / 根號三百萬
向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操作的引用都會被存儲在一個??臻g。在棧空間里file指向的地址還是不同的地址,因此可以解決這個問題。猜測是這樣,并沒有實際證據。
2018-08-20
最贊回答 / haoyun666
只有一個ready,那么第二個在讀取的時候會一直被等待呀,等到能讀取。如果其中一個讀數據不ok,那么證明已經關閉了數據讀取完了,這是就拍另一個就行了。所以沒有問題。
2018-07-30