zoukankan      html  css  js  c++  java
  • golang channel的行为

    1. 读nil的channel是永远阻塞的。关闭nil的channel会造成panic。


    2. closed channel的行为:

      (1)向close的channel发消息会panic,关闭一个已经关闭的channel,也会panic。所以应该由生产者关闭channel。

      (2)如果close的channel还有数据,仍然可以读取。

      (3)读取close的并且空的channel,会马上返回零值(注意chan int会返回0),所以可以用于广播。

      (4)val,ok = <- ch, ok=false表示channel空并且close了 (注意不是“或者”)。结合(1)、(2),这里可以用于消费者。

      (5)close channel可以用来广播,因为读取或者select关闭的channel,会马上返回。如果是存在多个生产者,此时不能随便关闭channel,可以通过关闭另一个channel来停止消费行为。


    3. 可以对channel使用range。这样不用写select,显得代码简洁。

    4. select是随机的,select越多channel消耗越多。

    参考:

    https://stackoverflow.com/questions/34897843/why-does-go-panic-on-writing-to-a-closed-channel

  • 相关阅读:
    认识双阶乘
    认识双阶乘
    微积分的计算
    微积分的计算
    多维随机变量与其对应的分布
    多维随机变量与其对应的分布
    抽样分布与统计推断
    抽样分布与统计推断
    各国货币的研究
    各国货币的研究
  • 原文地址:https://www.cnblogs.com/dearplain/p/9246558.html
Copyright © 2011-2022 走看看