我正在致力于一个golang项目,其中的树节点存储在一个地图中,以便快速访问。对映射的写入永远不会同时发生(对于每个键,它们只发生一次),但是我想同时读取这两个读/写。我一直在阅读关于sync.Map和简单使用RWMutex锁的文章,但是我不确定哪个更适合这个用例(或者是否有一个第三方包解决了这个问题)。是否有人对一种方法有建议/是否有任何资源可供阅读各种不同的选择?谢谢!
发布于 2020-04-22 00:50:42
从使用sync.Map开始。它比滚动你自己的更简单,而且可能会更快。
映射类型是针对两种常见用例进行优化的:(1)当给定键的条目只写一次但多次读取时,就像只增长的缓存中那样,或者(2)当多个对象读取、写入和覆盖不相交的键集的条目时。在这两种情况下,与单独的Mutex或RWMutex配对的Go映射相比,使用Map可以显著减少锁争用。
案例(1)在这个引文中(来自sync.Map的官方文档)听起来就像你所需要的。
如果随着时间的推移,您最终对性能不满意,那么对其进行基准测试,并以更快的解决方案(如果可能的话)替换慢部分。
https://stackoverflow.com/questions/61355008
复制相似问题