golang对channel的使用,可以类比现实生活中的什么情景?

本人是golang萌新,第一次接触channel,有点抽象,也没怎么接触过c/c++,请问日常生活中,有什么可以类比的呢?

阿波罗的战车
浏览 694回答 3
3回答

守候你守候我

可以类比到生活中的管道或者是流水线传送带,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

var c = make(chan int,1)这样的channel就像就只能放1个货物传送带,放入货物直到这个货物被取走,这个工作流程都是停止(阻塞)在这里的。在goroutine中的表现就是该go程被阻塞。var c = make(chan int)这样定义的channel是无缓冲的,更类似于我们买票的窗口,传递和接受都是阻塞的,只有双方都准备好才能继续下一次操作。
打开App,查看更多内容
随时随地看视频慕课网APP