golang 做了個mutex與atomic性能測試


func BenchmarkMutex(b *testing.B)  {
    var number int
    lock := sync.Mutex{}
    for i:=0; i< b.N;i++{
        go func() {
            defer lock.Unlock()
            lock.Lock()
            number++
        }()
    }
}

func BenchmarkAtomic(b *testing.B)  {
    var number int32
    for i:=0; i< b.N;i++{
        go func() {
            atomic.AddInt32(&number, 1)
        }()
    }
}

用兩個函數做性能測試 benchmarkMutex與benchmarkAtomic 來比較互斥鎖的差異

$ go test -v -cpu 1,2,4 -benchmem   -bench=. 
goos: darwin
goarch: amd64
pkg: puzzlers/article21/q3
BenchmarkMutex           1000000              2949 ns/op             424 B/op          0 allocs/op
BenchmarkMutex-2         5000000               336 ns/op              22 B/op          0 allocs/op
BenchmarkMutex-4        10000000               205 ns/op               0 B/op          0 allocs/op
BenchmarkAtomic          2000000              1745 ns/op             156 B/op          0 allocs/op
BenchmarkAtomic-2       10000000               176 ns/op               0 B/op          0 allocs/op
BenchmarkAtomic-4       10000000               225 ns/op               0 B/op          0 allocs/op
PASS
ok      puzzlers/article21/q3   26.179s

我們發現原子鎖的性能高於互斥鎖 不管從內存消耗與CPU運行 都比互斥鎖要好


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM