文章目录
一、简介
-
sync.Map 是并发安全的,内部采用读(read)写(dirty)分离,常用于
多读少写
场景 -
不适用存储大量数据,因为最坏情况下,sync.Map 的内存会翻倍
-
设计理念
-
读写分离
read:只读结构,采用原子操作,无须加锁,提高性能
dirty:普通map,读写都加锁
misses:从 dirty 中读取的次数,misses>=Len(dirty) dirty 升级为 read (直接复制)
读: read 中读(原子操作,无锁),不存在,则上锁从 dirty 中读,且 misses++,misses>=Len(dirty) 则 升级为 read (复制)
写:上锁写入 dirty
-
延迟删除
删除只是为 value 打一个标记,在 dirty map 提升时才执行真正的删除
-
降低锁的粒度
使用只读结构 read,原子操作,降低锁的粒度
-
二、源码
(一)结构