Post

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.