本人是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 关注
- 716 浏览
添加回答
举报
0/150
提交
取消