为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 692 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信