【问题标题】:Notify all goroutines通知所有 goroutine
【发布时间】:2013-02-28 15:52:44
【问题描述】:

我正在使用 Go 开发 TCP 服务器。现在我想通知所有与客户端对话的 goroutine 放弃他们的连接,转储他们拥有的东西并停止。

关闭频道是通知所有频道的一种方式。

问题是:那是惯用的 Go 吗?如果我错了;那么我应该怎么做(通知所有的 goroutines - 比如 .NET 中的 ManualResetEvent)?

注意:我是 Go 新手,刚刚学习并开始使用 TCP Server,因为我之前用 C# 编写过。

【问题讨论】:

    标签: concurrency tcp parallel-processing go


    【解决方案1】:

    是的,关闭通道是 Goroutine 之间通信的惯用 Go 方式。

    您需要在每个 goroutine 启动时将一个通道传递给它,并在每个网络事件之后使用 select 调用检查通道。

    您还需要设置网络事件的超时时间,这样您的连接就不会永远挂起。

    【讨论】:

    • 谢谢;正如你所说,我对每个连接都有超时。但仅出于学习目的:是否有另一种方式与大量 goroutine 进行通信? (手工机制除外)
    • 如果你不专门编写代码来处理这种通信,goroutine 将如何处理你的通信?
    • 否;我的意思是一些 Go 结构,比如通道,或者一些 Go 技巧,比如在数据结构中嵌入 Mutex。例如,是否可以在我的数据结构中嵌入一个通道(不定义字段),以便它可以与
    【解决方案2】:

    从 Go 1.7 开始,您可以使用 context 包。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-02
      • 2010-09-07
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      • 2020-02-14
      相关资源
      最近更新 更多