map和sync.map基準(zhǔn)測試

在基準(zhǔn)測試中,在并發(fā)安全的情況下sync.Map會比我們常用的map+讀寫鎖更加的快,快了五倍,這是得以于只讀read設(shè)計(jì),減低鎖的粒度。但是利用讀寫鎖的話,我們存儲的不是一個(gè)簡單數(shù)據(jù)類型,而是一個(gè)指針對象,那么用普通map+讀寫鎖能很好地控制鎖的粒度,達(dá)到更好的操作。

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

測試結(jié)果

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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容