对golang的Channel初始化的有缓存与无缓存解释

本文介绍了Golang中无缓冲和有缓冲Channel的区别。无缓冲Channel是同步的,发送操作会阻塞直到接收者取走数据;而有缓冲Channel在缓冲未满时,发送不会阻塞。当向有缓冲Channel写入第二个值时,如果第一个值还未被接收,则会阻塞。在Go 1.4环境下,Channel的写入是否阻塞表现可能交替且随机。理解goroutine间的阻塞同步对于Go编程至关重要。
摘要由CSDN通过智能技术生成

首先编程的时候遇到疑问,输出跟我所想预想不一样,后来查到了golang社区的帖子,其中一篇帖子 :健哥大人  做出了一些解释。

我摘抄重点过来:

无缓冲的与有缓冲channel有着重大差别,那就是一个是同步的 一个是非同步的。

比如

c1:=make(chan int)         无缓冲

c2:=make(chan int,1)      有缓冲

c1<-1                            

无缓冲: 不仅仅是向 c1 通道放 1,而是一直要等有别的携程 <-c1 接手了这个参数,那么c1<-1才会继续下去,要不然就一直阻塞着。

有缓冲: c2<-1 则不会阻塞

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值