「Golang」关于通道的一些总结

  1. 通道分为有缓冲与无缓冲,创建方式分别为make(chan type)或make(chan type ,0) 与make(chan type ,len)。
  2. 无缓冲通道在没有接收端或没有发送端的时候将会阻塞。
  3. 无缓冲通道可以完成两个go程的同步消息处理操作,并且无缓冲通道的接收数据会发生在唤醒放者之前。 如下图(画的不好见谅):
    序号3解释
  4. 如果有缓冲通道在发送时发现队列已满,则发送方将等待直至接收方取出数据,如果队列为空则接收方同样等待发送方放入数据。
  5. for range 可以在一个未关闭的同道中循环接收数据,与
    for { i, ok := <-ch if !ok { break } fmt.Println(i) } 等同,但当通道关闭时则会跳出循环。
  6. select{} 将会永久阻塞,即无任何case的select 会永久阻塞
  7. select的多个case满足则会随机选择,此特点是为了防止饥饿问题。
  8. 通道为nil时发送与接收均会阻塞,在select也会永不执行

我已开通自己的公众号【Echo的技术笔记】
日后的文章发布会主要在公众号上发布
希望各位关注一下
谢谢大家啦
在这里插入图片描述

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值