Go 1.9 sync Map 源码阅读笔记
一、sync Map 包整体结构 本文主要阐述:Load、Store、Delete,更加详细的阐述可以参考源码描述(建议先大体浏览一下Map源码)。 导言: 空间换时间。 通过冗余的两个数据结构(read、dirty),实现加锁对性能的影响。 使用只读数据(read),避免读写冲突。 动态调整,miss次数多了之后,将dirty数据提升为read。 double-checking。 延迟删除。 删除一个键值只是打标记(会将key对应value的pointer置为nil,但read中仍然有这个key:key;value:nil的键值对),只有在提升dirty的时候才清理删除的数据。 优先从read读取、更新、删除,因为对read的读取不需要锁。 虽然read和dirty有冗余数据,但这些数据是通过指针指向同一个数据,所以尽管Map的value会很大,但是冗余的空间占用还是有限的。 二、基础数据结构 1、Map // Map is a concurrent map with amortized-constant-time loads, stores, and deletes. // It is safe for multiple goroutines to call a Map's methods concurrently. // // It is optimized for use