「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也会永不执行
全部评论

相关推荐

程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
04-11 21:31
四川大学 Java
野猪不是猪🐗:(ja)va学弟这招太狠了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务