前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >map和sync.map基准测试

map和sync.map基准测试

作者头像
用户7962184
发布2020-11-20 15:04:16
9620
发布2020-11-20 15:04:16
举报
文章被收录于专栏:没事多喝水没事多喝水

在基准测试中,在并发安全的情况下sync.Map会比我们常用的map+读写锁更加的快,快了五倍,这是得以于只读read设计,减低锁的粒度。但是利用读写锁的话,我们存储的不是一个简单数据类型,而是一个指针对象,那么用普通map+读写锁能很好地控制锁的粒度,达到更好的操作。

代码语言:javascript
复制
package main

import (
    "sync"
    "testing"
)

func BenchmarkMap(b *testing.B) {
    rwLock := sync.RWMutex{}
    mapA := make(map[int]int)
    for i := 0; i < b.N; i++ {
        rwLock.Lock()
        mapA[i] = i
        rwLock.Unlock()
        rwLock.RLock()
        _ = mapA[i]
        rwLock.RUnlock()
    }
}

func BenchmarkSyncMap(b *testing.B) {
    mapB := sync.Map{}
    for i := 0; i < b.N; i++ {
        mapB.Store(i, i)
        iX, ok := mapB.Load(i)
        if ok {
            _ = iX.(int)
        }
    }
}

测试结果

代码语言:javascript
复制
go test map_test.go -bench=.
goos: linux
goarch: amd64
BenchmarkMap-12          5000000               271 ns/op
BenchmarkSyncMap-12      1000000              1085 ns/op
PASS
ok      command-line-arguments  2.734s
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档