本人是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程被阻塞。

慕婉清6462132
TA貢獻1804條經驗 獲得超2個贊
var c = make(chan int,1)
這樣的channel就像就只能放1個貨物傳送帶,放入貨物直到這個貨物被取走,這個工作流程都是停止(阻塞)在這里的。在goroutine中的表現就是該go程被阻塞。
var c = make(chan int)
這樣定義的channel是無緩沖的,更類似于我們買票的窗口,傳遞和接受都是阻塞的,只有雙方都準備好才能繼續下一次操作。
- 3 回答
- 0 關注
- 746 瀏覽
添加回答
舉報
0/150
提交
取消