有一個map[PlayerId]Player檢查玩家是否在線并在知道他的 ID 的情況下執(zhí)行狀態(tài)更改。這必須同時從多個 goroutine 中完成?,F(xiàn)在我打算使用streamrail 的 concurrent map,但是使用通道的常規(guī)地圖和同步呢?在 Go 中它應該總是首選嗎?在某些情況下它應該是首選嗎?它們基本上只是完成同一件事的兩種方法嗎?順便說一句,我知道口號:不要通過共享內存來通信 通過通信共享內存但是 stdlib 中有鎖定機制,文檔中沒有關于根本不使用它們的字樣。
1 回答

慕仙森
TA貢獻1827條經驗 獲得超8個贊
從最簡單的方法開始:地圖和 RWMutex。
我不推薦使用并發(fā)庫,除非它被廣泛使用和測試(例如,參見https://github.com/streamrail/concurrent-map/issues/6)。
請注意,即使您使用 github.com/streamrail/concurrent-map,您仍然需要在以下場景中實現(xiàn)自己的同步(使用 RWMutex):
if _, ok = m[k]; !ok {
m[k] = newPlayer()
}
如果您的游戲非常受歡迎并且被很多玩家玩,您會發(fā)現(xiàn)這種方法無法擴展,但只有當它成為問題時我才會擔心。
- 1 回答
- 0 關注
- 173 瀏覽
添加回答
舉報
0/150
提交
取消