golang中的map

Map 是一个非常常用的数据结构,一个无序的 key/value 对的集合,其中 Map 所有的 key 都是不同的,然后通过给定的 key 可以在常数时间 O(1) 复杂度内查找、更新或删除对应的 value。

就我所理解map其实就是一个数组+链表的组合,对于给定的 key,首选对key进行hash,然后相对哈希表的长度取模,将 key 映射到指定的地方。所以很明显,go中的map不是并发安全的。

在go新版本中,已经有了并发安全的map,据我所知其实现原理是通过原子性操作,来保证并发安全的,除了通过原子性操作以外,还有一直比较经典的实现并发安全map的方法,那就是分段锁。

分段锁的原理,是通过将该map分成n段,在不同的段之间加锁,当程序同时访问不同段的数据时,是安全的,如果同时访问一个段的数据,则因为锁的缘故,按顺序访问。并且通过定义一个分散器,让所有数据均匀分布,避免数据过于集中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值