sync.Map原理
sync.Map 是高性能线程安全 map,核心思想是:
读写分离
数据结构:
1
2
3
4
5
6
type Map struct {
mu sync.Mutex // 写锁,保护写操作
read atomic.Value // 读专用 map,类型为 readOnly
dirty map[interface{}]*entry // 写专用 map,保护修改
misses int // 未命中读 map 的次数
}
核心原理:
- read-only map
- 热点数据存储在 read 里,读取无需加锁
- atomic.Value 保证可见性(读 goroutine 无阻塞)
- dirty map
- 写操作(Store / Delete)会在 dirty map 中修改
- dirty map 通过 Mutex 保护
- 当写操作较多时,dirty map 会被合并到 read map(amended = true)
- miss 计数器
- 当 read map 未命中多次,会触发 read map 和 dirty map 合并
This post is licensed under CC BY 4.0 by the author.