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

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

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

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

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

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

怎麼說?比如

c1:=make(chan int)        無緩衝

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

c1<-1                            

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

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

打個比喻

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

無緩衝保證信能到你手上

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

有緩衝的 保證 信能進你家的郵箱

++++++++++++++++++++++++++++++++++++++

【我總結的】沒有緩衝的Channel是一直阻塞著直到能從chan中取到資料為止,有緩衝的channel是阻塞著只要能取到一個就執行主線程的代碼!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.