有一个map[PlayerId]Player检查玩家是否在线并在知道他的 ID 的情况下执行状态更改。这必须同时从多个 goroutine 中完成。现在我打算使用streamrail 的 concurrent map,但是使用通道的常规地图和同步呢?在 Go 中它应该总是首选吗?在某些情况下它应该是首选吗?它们基本上只是完成同一件事的两种方法吗?顺便说一句,我知道口号:不要通过共享内存来通信 通过通信共享内存但是 stdlib 中有锁定机制,文档中没有关于根本不使用它们的字样。
1 回答
慕仙森
TA贡献1827条经验 获得超7个赞
从最简单的方法开始:地图和 RWMutex。
我不推荐使用并发库,除非它被广泛使用和测试(例如,参见https://github.com/streamrail/concurrent-map/issues/6)。
请注意,即使您使用 github.com/streamrail/concurrent-map,您仍然需要在以下场景中实现自己的同步(使用 RWMutex):
if _, ok = m[k]; !ok {
m[k] = newPlayer()
}
如果您的游戏非常受欢迎并且被很多玩家玩,您会发现这种方法无法扩展,但只有当它成为问题时我才会担心。
- 1 回答
- 0 关注
- 145 浏览
添加回答
举报
0/150
提交
取消