为了账号安全,请及时绑定邮箱和手机立即绑定

基于 goroutine/channel 的机制应该取代并发映射吗?

基于 goroutine/channel 的机制应该取代并发映射吗?

Go
人到中年有点甜 2021-12-06 19:34:43
有一个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()

}

如果您的游戏非常受欢迎并且被很多玩家玩,您会发现这种方法无法扩展,但只有当它成为问题时我才会担心。


查看完整回答
反对 回复 2021-12-06
  • 1 回答
  • 0 关注
  • 145 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信