何时关闭频道[重复]

Posted

技术标签:

【中文标题】何时关闭频道[重复]【英文标题】:When to close channels [duplicate] 【发布时间】:2020-06-09 04:10:53 【问题描述】:

查看 Go 中的一些工作池示例,我无法确定关闭通道的一致方法。例如,这个project on Github 似乎关闭了所有频道,而这个similar implementation 并没有关闭一个频道!我知道关闭频道表示完成;无法在其上发送更多值。但它只是一个运行时断言吗?不打开通道也会留下内存泄漏吗?或者你只是依赖垃圾收集?如果我要明确地关闭第二个示例中打开的频道,我会在哪里关闭?

【问题讨论】:

"通道不像文件;你通常不需要关闭它们。只有在必须告诉接收器没有更多值到来时才需要关闭,例如终止范围循环。” tour.golang.org/concurrency/4 谢谢!知道如何在第二个示例中关闭通道仍然很有趣。特别是如何正确关闭readyPool中的嵌套通道。 【参考方案1】:

频道可以以任何你喜欢的方式使用:

如果您要发送有限数量的项目,则关闭通道向侦听器表明没有更多项目即将到来 如果您实施连续流(微服务等),则通道将永远不会关闭。 通道关闭事件可用于发出事件信号

注意:您确实不必必须关闭一个频道才能对其进行垃圾收集。一旦频道超出生产者和消费者的范围,即使频道上有未读的项目,也会被回收。

【讨论】:

感谢您的快速回复!我的结论是,关闭我链接的 Github 项目中的通道只会有助于清理,以防用户在停止后忘记取消引用整个池(因为它只能启动一次)。

以上是关于何时关闭频道[重复]的主要内容,如果未能解决你的问题,请参考以下文章

颤振通道相互替换[关闭]

何时使用类别以及何时使用子类化? [关闭]

javascript 检查浏览器窗口何时关闭

javascript 检查浏览器窗口何时关闭

如何删除我的不和谐机器人在特定频道中发送的先前消息?

如何关闭写作频道