map结构:
根据hash值得低八位找到桶位置,桶里存放tophash、对应的所有key、对应的所有value、指向下一个桶的指针:tophash存放hash值的高八位,用于快速判断key是否在这个桶中,key和value分开存放是因为key是int64位,val是int8位,存放k-v对会因为内存对齐导致存val也需要8个字节,所以分开存放来节省空间。
map是并发不安全的,读写并发报panic,写会更新一个状态值hasWriting,其他读时会查到hasWriting表示有写,就抛出异常
可以参考:https://juejin.cn/post/7066528623297036302 ; https://blog.csdn.net/ByteDanceTech/article/details/126314053
syc.map是并发安全的:
concurrent-map是加分段锁,也有go的实现,https://github.com/orcaman/concurrent-map。对每个分片(shard,多个桶)加锁