golang的syncMap

底层实现

在这里插入图片描述

type Map struct {
	mu Mutex
	read atomic.Value // readOnly
	dirty map[interface{}]*entry
	misses int
}
  1. mu
    mu是一个简单的互斥锁,底层为type Mutex struct { state int32 sema uint32 }
  2. read
    read是一个原子操作,允许并发读。但是更新read数据时则需要加锁保护。实现底层为:
type Value struct {
	v interface{}
}

type ifaceWords struct {
	typ  unsafe.Pointer
	data unsafe.Pointer
}

在sync.Map中,read具体存储为:

type readOnly struct {
	m       map[interface{}]*entry
	amended bool // true if the dirty map contains some key not in m.
}

也就是一个readonly
4. dirty
dirty是一个原始Map,线程不安全。存储写入的新Key以及read中没有删除的key。
5. misses
misses是一个整型变量,从read中读取数据时如果读取失败那么misses就会+1,当miss值增大到一定的值后,dirty就会成为一个read。
6. entry
entry是一个指针,指向value,其底层为:

type entry struct {
	p unsafe.Pointer // *interface{}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

smile_new

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值