golang channel 有緩衝 與 無緩衝 是有重要區別的golang
我以前天真的認爲 有緩衝與無緩衝的區別 只是 無緩衝的 是 默認 緩衝 爲1 的緩衝式線程
實際上是完全錯誤的,無緩衝的與有緩衝channel有着重大差異同步
那就是一個是同步的 一個是非同步的channel
怎麼說?好比總結
c1:=make(chan int) 無緩衝數據
c2:=make(chan int,1) 有緩衝make
c1<-1 阻塞
無緩衝的 不單單是 向 c1 通道放 1 而是 一直要有別的攜程 <-c1 接手了 這個參數,那麼c1<-1纔會繼續下去,要否則就一直阻塞着攜程
而 c2<-1 則不會阻塞,由於緩衝大小是1 (實際上是緩衝大小爲0)只有當 放第二個值的時候 第一個還沒被人拿走,這時候纔會阻塞。錯誤
打個比喻
無緩衝的 就是一個送信人去你家門口送信 ,你不在家 他不走,你必定要接下信,他纔會走。
無緩衝保證信能到你手上
有緩衝的 就是一個送信人去你家仍到你家的信箱 轉身就走 ,除非你的信箱滿了 他必須等信箱空下來。
有緩衝的 保證 信能進你家的郵箱
++++++++++++++++++++++++++++++++++++++
【我總結的】沒有緩衝的Channel是一直阻塞着直到能從chan中取到數據爲止,有緩衝的channel是阻塞着只要能取到一個就執行主線程的代碼!