美文网首页程序员
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基准测试

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