基于goroutine / channel的机制是否应该替换并发映射?

时间:2016-01-06 11:04:30

标签: go

有一个map[PlayerId]Player来检查玩家是否在线并且知道他的身份证进行状态改变。这必须同时从多个goroutine完成。

目前我打算使用streamrail's concurrent map,但使用频道进行常规地图和同步呢?

  • Go中应该首选吗?
  • 在某些情况下应该优先考虑吗?
  • 他们基本上只是两种方法来完成同样的事情吗?
顺便说一句,我知道口号:

  

通过通信

共享内存共享内存进行通信

但stdlib中存在锁定机制,文档中没有关于根本不使用它们的文字。

1 个答案:

答案 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()
}

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