亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

golang對channel的使用,可以類比現實生活中的什么情景?

golang對channel的使用,可以類比現實生活中的什么情景?

Go
阿波羅的戰車 2019-02-04 09:06:26
本人是golang萌新,第一次接觸channel,有點抽象,也沒怎么接觸過c/c++,請問日常生活中,有什么可以類比的呢?
查看完整描述

3 回答

?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

可以類比到生活中的管道或者是流水線傳送帶,channel可以寫入或者讀取,channel寫入的時候就像是往傳送帶上放入貨物,讀取channel就像是從傳送帶上取貨物。
channel分為buffered和立即阻塞的,取決于你是如何初始化這個channel的:
緩沖channel:

var c = make(chan int,10)

這樣的channel就像容量為10的傳送帶,上面可以放10個貨物,如果放滿了,就不能再放了(go程阻塞),只能等取走之后才可以繼續放(go程繼續執行)。
而非緩沖的channel:

var c = make(chan int)

這樣的channel就像就只能放1個貨物傳送帶,放入貨物直到這個貨物被取走,這個工作流程都是停止(阻塞)在這里的。在goroutine中的表現就是該go程被阻塞。


查看完整回答
反對 回復 2019-03-16
?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

var c = make(chan int,1)

這樣的channel就像就只能放1個貨物傳送帶,放入貨物直到這個貨物被取走,這個工作流程都是停止(阻塞)在這里的。在goroutine中的表現就是該go程被阻塞。

var c = make(chan int)

這樣定義的channel是無緩沖的,更類似于我們買票的窗口,傳遞和接受都是阻塞的,只有雙方都準備好才能繼續下一次操作。


查看完整回答
反對 回復 2019-03-16
  • 3 回答
  • 0 關注
  • 746 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號