一个系列彻底搞懂map(终):并发安全map
并发安全的map在日常开发中使用极为频繁,单纯通过map与sync.RWLock结合并给整个map上粗粒度锁的方式效率并不高。在go1.9中引入sync.Map,通过快慢路径的方式提升并发读性能,除此之外还可以用大锁打为小锁的方式减少并发冲突,获得更优的性能表现。
华中科技大学本硕, 热爱编程, 擅长C++、Go开发
并发安全的map在日常开发中使用极为频繁,单纯通过map与sync.RWLock结合并给整个map上粗粒度锁的方式效率并不高。在go1.9中引入sync.Map,通过快慢路径的方式提升并发读性能,除此之外还可以用大锁打为小锁的方式减少并发冲突,获得更优的性能表现。
go语言的map是使用极为频繁的数据结构,如果单单是以理解哈希表原理为目标的话,阅读本系列第一篇文章即可。本篇文章更倾向于通过分析go源码的方式,来深入学习一些哈希表优化技巧。
上文讲到了利用哈希结构实现map,除此之外还可以用红黑树实现。相较于hash结构的实现,红黑树实现虽然查找删除的时间复杂度由O(1)退化为O(logN),但却拥有更优的空间效率,同时还提供了对key排序的功能,因此广泛应用于数据库存储领域。
map映射结构频繁地运用在日常的开发之中,因此成为了面试中的高频考点,本系列将从map的两种实现(hash以及红黑树)出发,再详解go语言的map,最后讨论如何实现高性能的并发安全map,彻底搞懂map结构的奥秘。