1. 程式人生 > >go Channel筆記

go Channel筆記

go Channel筆記

作者:使用者 來源:網際網路 時間:2018-09-03 20:02:27

go

go Channel筆記 -摘要: 本文講的是go Channel筆記, go chan 記錄 都知道chan是go裡面是goroutine之間互相通訊的東西 關於無快取和有快取堵塞的相關資料也很多,只是今天我突然被一個問題困擾了,就是我在一個goroutine向chan塞了資料之後,比如無快取c

教程 雲棲大會 Mysql 備案 文件 域名 whois查詢 PHP教程 備份 網際網路大學 

雲教程

go chan 記錄

都知道chan是go裡面是goroutine之間互相通訊的東西 
關於無快取和有快取堵塞的相關資料也很多,只是今天我突然被一個問題困擾了,就是我在一個goroutine向chan塞了資料之後,比如無快取chan,然後當前goroutine就是堵塞,必須由另外一個goutine來取走chan資料就會接著走下面的流程。

然後我的問題就是為什麼必須要另外一個goroutine才能取走資料呢,為啥不能自己塞自己取,比如在main goroutine 向chan 塞資料後,然後立馬再去拿出來,就會報錯產生死鎖。 
這個原因看了很多資料都只是怎麼講,沒有講其中的原因,後來看了chan內部的實現原理瞬間就理解了,是因為當chan堵塞的時候,會把當前導致堵塞的goroutine 已經置為一個waiting的狀態,所以也就說當前的這個goroutine自己已經不可能再接受chan的資料了,必須是由另外的一個goroutine 接收之後,才能繼續走下面的流程程式碼。 
具體的原理,可以參考我看的另外一篇博文:chan阻塞到底是發生了什麼呢

以上是雲棲社群小編為您精心準備的的內容,在雲棲社群的部落格、問答、公眾號、人物、課程等欄目也有的相關內容,歡迎繼續使用右上角搜尋按鈕進行搜尋go ,以便於您獲取更多的相關知識。