sync.map与map的区别

本文阅读 2 分钟
首页 golang 正文
题目来源:知乎
频次:1

答案:小小

Go 语言原生 map 并不是线程安全的,对它进行并发读写操作的时候,需要加锁。
而 sync.map 则是一种并发安全的 map,在 Go 1.9 引入。
sync.map 是线程安全的,读取,插入,删除也都保持着常数级的时间复杂度。
sync.map 的零值是有效的,并且零值是一个空的 map。在第一次使用之后,不允许被拷贝。
一般情况下解决并发读写 map 的思路是加一把大锁,或者把一个 map 分成若干个小 map,对 key 进行哈希,只操作相应的小 map。前者锁的粒度比较大,影响效率;后者实现起来比较复杂,容易出错。
而使用 sync.map 之后,对 map 的读写,不需要加锁。并且它通过空间换时间的方式,使用 read 和 dirty 两个 map 来进行读写分离,降低锁时间来提高效率。

这道面试题涉及了,sync.map 和 map 的知识点。在答完区别后,可以对这两个结构分别进行讲解。

本文来自投稿,不代表本站立场,如若转载,请注明出处:
syncpool的实现原理
« 上一篇 09-17
问了sync.Map(我说我对sync.Pool比较熟,就说Pool了)
下一篇 » 09-17

发表评论

发表评论