我需要使用一个非常大的散列表,并同时从许多读者和作者那里访问它。是否有像map这样的数据结构,支持许多并行读写,而不锁定每个访问的整个结构?
发布于 2019-10-20 19:52:12
因为你要了一张地图
不锁定整个结构,每次访问
我向你们介绍以下的执行情况:
https://github.com/cornelk/hashmap
该项目使用许多CPU体系结构中常见的原子指令实现纯无锁散列图数据结构。
普通的go sync.Map仍然使用底层的Mutex,它锁定了相应的映射数据结构。
发布于 2019-10-20 12:05:22
包sync提供并发安全地图。
Map类似于Go映射接口{}接口{},但是对于多个goroutines并发使用是安全的,而不需要额外的锁定或协调。加载、存储和删除在摊销的恒定时间内运行。
尽管规范本身指出了应该何时使用它的这两种特定情况(否则,它们建议使用带有锁定机制的普通映射):
https://stackoverflow.com/questions/58472781
复制相似问题