sync.Map详解

导航Golang sync.Map 详解简单的介绍一下 Golang MapMap 使用sync.Mapsync.Map 是什么sync.Map 使用sync.Map 剖析sync.map 整体结构参考参考Golang sync.Map 详解原生的 Go Map 在并发读写场景下经常会遇到 panic 的情况。造成的原因是 map 是非线性安全的,并发读写过程中 map 的数据会被写乱。而一般情况下,解决并发读写 map 的思路是加锁,或者把一个 map 切分成若干个小 map,对 key 进行哈希。
摘要由CSDN通过智能技术生成

Golang sync.Map 详解

原生的 Go Map 在并发读写场景下经常会遇到 panic 的情况。造成的原因是 map 是非线性安全的,并发读写过程中 map 的数据会被写乱。

而一般情况下,解决并发读写 map 的思路是加锁,或者把一个 map 切分成若干个小 map,对 key 进行哈希。
在业界中使用最多并发指出的模式分别是:

  • 原生 map + 互斥锁 或者 读写锁
  • 标准库 sync.Map (Go 1.9 及之后)

简单的介绍一下 Golang Map

Go 语言中 map 是一个 key(索引)和 value(值)形式的无序集合,也可以称为关联数组或字典;Golang中的 map 所有的 key 都是不同,通过给定的 key 可以在常数时间复杂度内检索、更新或删除对应的 value。

Golang map 的 key 是任何可以使用 == 进行比较的数据类型,如 int、string、bool 等,value 可以是任意类型。

Map是一种无序的数据结构,因此 map 的迭代顺序是不确定的,并且不同的哈希函数实现可能导致不同的遍历顺序。

Map 使用

// 声明
var mapName map[keyType]valueType
// 创建
mapName = make(map[keyType]valueType, len) // 需要声明
mapName := make(map[keyType]valueType, len) // 声明+创建
// 循环遍历
for key, value := range mapName{
   
}
// 删除
delete(mapName, "Key")

sync.Map

sync.Map 是什么

Go 语言原生 map 是非线性安全的,对 map 进行并发读写操作时,需要加锁。在 Go 1.9 引入 sync.map,一种并发安全的 map。

sync.map 是线性安全的,读取、插入、删除都保持常数级的时间复杂度。
sync.map 的零值是有效的,并且零值是一个空的 map。在第一次使用之后,不允许被拷贝。<

  • 7
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值