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

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

相关推荐

2024-12-30 22:31
吉首大学 Web前端
工字钢写代码:改成吉林就OK了
点赞 评论 收藏
分享
01-08 09:40
中南大学 Java
苏苏加油努力:你的女神不回你消息,并且给别的男生发消息 be like
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务