Concurrency 通知所有goroutine

Concurrency 通知所有goroutine,concurrency,tcp,parallel-processing,go,Concurrency,Tcp,Parallel Processing,Go,我正在Go的TCP服务器上工作。现在我想通知所有正在与客户端对话的goroutine,让它们放弃连接,转储它们所拥有的并停止 关闭频道是通知所有频道的一种方式 问题是:这是惯用的围棋吗?如果我错了;那么我应该怎么做(通知所有的goroutine,比如.NET中的ManualResetEvent) 注意:我是一个新手,刚开始学习TCP服务器,因为我以前在C#中写过。是的,关闭通道是Goroutines之间通信的惯用方式 您需要在每个goroutine启动时向其传递一个通道,并在每个网络事件后使用s

我正在Go的TCP服务器上工作。现在我想通知所有正在与客户端对话的goroutine,让它们放弃连接,转储它们所拥有的并停止

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

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


注意:我是一个新手,刚开始学习TCP服务器,因为我以前在C#中写过。是的,关闭通道是Goroutines之间通信的惯用方式

您需要在每个goroutine启动时向其传递一个通道,并在每个网络事件后使用select调用检查该通道


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

从Go 1.7开始,您可以使用该软件包。

谢谢;正如你所说,我对每个连接都有一个超时。但仅仅是为了学习目的:有没有其他方法可以与大量的goroutines交流?(除了手工制作的机制)如果您没有专门编写代码来处理通信,goroutine将如何处理您的通信;我指的是一些Go结构,比如通道,或者一些Go技巧,比如在数据结构中嵌入互斥。例如,是否可以在我的数据结构中嵌入一个通道(而不是定义一个字段),以便它可以使用