golang 中 map 的并发问题
我有两个场景不太适合使用读写锁,求问有什么好的解决方案:
1. 并发写入不同的 key,读取和写入肯定不会同时进行
实际场景是每个协程维护一个会话信息,会话之间肯定不会冲突,会话内也不会并发读写。协程内的局部变量可以解决这个问题,但我想汇总协程内的信息,就需要使用 map 了。
2. 大量的并发写入,少量的读取
这个和上面是同一个业务,要对不同会话内的不同类型事件次数进行统计,然后定时打印到控制台。说这是少量的读取也不太合适,因为写入前还要查询原值,但也不是读写锁更适合的读多写少的情况。这里可能是 map 实现本身的问题了,求问有什么更优的数据结构或算法处理这一问题,可以做到高效的原子性的 increase 1 ?