程序员

map和sync.map基准测试

2020-08-19  本文已影响0人  yellowone

在基准测试中,在并发安全的情况下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
上一篇下一篇

猜你喜欢

热点阅读