有一个map[PlayerId]Player
来检查玩家是否在线并且知道他的身份证进行状态改变。这必须同时从多个goroutine完成。
目前我打算使用streamrail's concurrent map,但使用频道进行常规地图和同步呢?
通过通信
共享内存共享内存进行通信
但stdlib中存在锁定机制,文档中没有关于根本不使用它们的文字。
答案 0 :(得分:1)
从最简单的方法开始:地图和RWMutex。
我不建议使用并发库,除非它被广泛使用和测试(例如,参见https://github.com/streamrail/concurrent-map/issues/6)。
请注意,即使您使用github.com/streamrail/concurrent-map,您仍需要在以下场景中实现自己的同步(使用RWMutex):
if _, ok = m[k]; !ok {
m[k] = newPlayer()
}
如果您的游戏非常受欢迎并且被许多玩家玩过,您会发现这种方法无法扩展,但只有当它成为问题时我才会担心。