sync.map与自建hashmap支持并发安全

  • sync.map 使用 read map与dity map

    • read map 将整个map存入atom.value中,同时value是额外封装了一层数据结构,它先把value值转换为了unsafe.Pointer类型的值,然后再把后者封装,并储存在其中的原生字典中,因此可以用原子操作,并发的修改read map中的不同key
    • 不过read map新增键值对是需要加互斥锁的,所以不能并发插入
    • dity map就是一个元素的map
  • 自建hashmap的方案

    • 预先初始化一定量的数组,元素是一个封装了各种数据类型指针字段的数据接口
    • 插入的键在取哈希值后对个数组的长度取余
    • 数组快满的时候,扩容两倍,旧的数组只读,写入数据都写入到新数组去,同事删除旧数组对应值
    • 因为元素都已经预先创建,所以外界使用时,体验上类似于可以实现并发插入了
    • 目前针对每个值修改时使用了读写锁,后续可以考虑参考sync.map使用原值操作
    • 问题,扩容时,每个元素都需要初始化,是性能瓶颈