FUNC BenchmarkMutex(b *表testing.B){ VAR番号int型 :ロック = 同期.Mutex {} のための I:= 0 ; I ++; iがbNのを< { 行くFUNC(){ lock.Unlock()延期 lock.Lock() 数 ++ }() } } BenchmarkAtomic FUNC(B * testing.B){ VAR番号INT32 用 I:= 0 ; iは++; iがbNのを< { (){FUNC行く atomic.AddInt32( &番号1 ) )(} } }
パフォーマンスの違いを比較するためにbenchmarkMutexとbenchmarkAtomic 2つのミューテックス機能をテスト
$ゴーテスト-v -CPU 1、2、4 -benchmem -bench = 。 グースネック:ダーウィン goarch:AMD64の PKG:のpuzzlers / article21 / Q3 BenchmarkMutex 1000000 2949の上のNS / 424でB / 0 ALLOCS / オン BenchmarkMutex - 2つの 5000000 336でNS / 22でB / 0 ALLOCS / オン BenchmarkMutex - 4 10000000 205 NS /で 0 B /で 0 ALLOCS / に関する ベンチマーク原子 2000000 1745の NS /オン 156 B / AT 0 ALLOCS / に関する ベンチマーク原子 - 2 10000000 176ナノ秒/ AT 0 B / AT 0 ALLOCS / に関する ベンチマーク原子 - 4 10000000 225でNS / 0でB / 0 ALLOCS / で PASS OKのpuzzlers / article21 / Q3 26 .179sを
我々は関係なく、CPUとメモリ消費量のミューテックスロックよりも高い原子ロックミューテックスのパフォーマンスから実行するよりも優れていることがわかりました