go - 何时关闭 channel

标签 go concurrency threadpool

这个问题在这里已经有了答案:





Is it OK to leave a channel open?

(6 个回答)


2年前关闭。




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

最佳答案

channel 可以以您喜欢的任何方式使用:

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

  • 注意:您不必关闭 channel 即可对其进行垃圾收集。一旦 channel 超出生产者和消费者的范围,即使 channel 上有未读的项目,它也会被回收。

    关于go - 何时关闭 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60394401/

    相关文章:

    templates - Go 模板 : How do I access array item (arr[2]) in templates?

    http - 如何在 go 中将文件作为 []byte 上传?

    go - 如何在导入包时在 GOPATH 中搜索包?

    java - 文件是否被其他应用程序访问

    go - 简单的 Go 并发示例

    c# - 线程池行为 : not growing from minimum size

    weblogic - 在Weblogic 10.0 MP2中修改线程数的位置

    forms - 将变量发送到第 3 方在线表单

    android - AsyncTask 在线程完成之前不调用 onPreExecute

    c# - 限制每个类的线程