美文网首页程序员
map和sync.map基准测试

map和sync.map基准测试

作者: yellowone | 来源:发表于2020-08-19 11:14 被阅读0次

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

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)
        }
    }
}

测试结果

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

相关文章

  • map和sync.map基准测试

    在基准测试中,在并发安全的情况下sync.Map会比我们常用的map+读写锁更加的快,快了五倍,这是得以于只读re...

  • go 中的 sync.Map

    sync.map sync.Map 的使用和内置的 map 类型一样,只不过它是并发安全的。 Store:存储一对...

  • Go语言——sync.Map详解

    Go语言——sync.Map详解 sync.Map是1.9才推荐的并发安全的map,除了互斥量以外,还运用了原子操...

  • Golang之Map源码解析

    在Golang情景中,Map主要分为两种:sync.Map和内置Map,两者主要区别是内置Map不支持并发读写,s...

  • sync.Map && map

    面试题: 为什么map不能并发读写? map 并发读写会panic吗? map + lock 和 sync.Ma...

  • go常用包——sync

    内容 Atomic Mutex RWMutex WaitGroup Once Sync.Map Sync.Pool...

  • Go sync.Map

    map并发读线程安全,并发读写线程不安全。 sync.Map 读写分离 空间换时间 Map Golang1.6之前...

  • sync.map

    这个包很常用, 主要是用于在并发情况下的map...// Map is like a Go map[interfa...

  • sync.Map

    场景: 针对一写多读、key不变的情况下高并发的读写 思路: 尽量减少锁 使用两个副本read、dirty,rea...

  • mysql 基准测试

    mysql 基准测试 基准测试策略 基准测试指标 基准测试工具 基准测试样例

网友评论

    本文标题:map和sync.map基准测试

    本文链接:https://www.haomeiwen.com/subject/mderjktx.html