1. 程式人生 > >golang channel 有緩衝 與 無緩衝 的重要區別

golang channel 有緩衝 與 無緩衝 的重要區別

golang channel 有緩衝 與 無緩衝 是有重要區別的

我之前天真的認為 有緩衝與無緩衝的區別 只是 無緩衝的 是 預設 緩衝 為1 的緩衝式

其實是徹底錯誤的,無緩衝的與有緩衝channel有著重大差別

那就是一個是同步的 一個是非同步的

怎麼說?比如

c1:=make(chan int) 無緩衝

c2:=make(chan int,1) 有緩衝

c1<-1

無緩衝的 不僅僅是 向 c1 通道放 1 而是 一直要有別的攜程 <-c1 接手了 這個引數,那麼c1<-1才會繼續下去,要不然就一直阻塞著

而 c2<-1 則不會阻塞,因為緩衝大小是1 (其實是緩衝大小為0)只有當 放第二個值的時候 第一個還沒被人拿走,這時候才會阻塞。

打個比喻

無緩衝的 就是一個送信人去你家門口送信 ,你不在家 他不走,你一定要接下信,他才會走。

無緩衝保證信能到你手上

有緩衝的 就是一個送信人去你家仍到你家的信箱 轉身就走 ,除非你的信箱滿了 他必須等信箱空下來。

有緩衝的 保證 信