我不喜欢 Go 的一件事是通道接收也会从通道中删除数据。这仅允许两个 goroutine 相互通信,即使有几种情况下两个或多个 goroutine 应该能够相互通信。
我知道我可以创建一组通道并为每个 goroutine 设置通道,但是将数据从一个 goroutine 移动到所有其他 goroutine 比将数据的一个副本移动到所有 goroutine 上的数据要多得多。
考虑一个案例,当我有数千个客户端连接到服务器,我希望一个只向其中一半发送消息,即接收该消息的 500 个 goroutine。如果消息是 512 字节,这将在 ram 移动中变成 250 KB 的数据,即使如果通道在接收时不删除数据,则可能只移动一次相同的数据。
所以我问是否有一些简单的方法可以做到这一点,还是我必须使用同步包中的互斥锁?虽然请告诉我是否计算错误并且通道不复制数据,因为在这种情况下我只能管理通道数组。
呼啦一阵风
相关分类