github.com/easierway/concurrent_map@v1.0.0/map_benchmark_test.go (about) 1 package concurrent_map 2 3 import ( 4 "strconv" 5 "sync" 6 "testing" 7 ) 8 9 type Map interface { 10 Set(key interface{}, val interface{}) 11 Get(key interface{}) (interface{}, bool) 12 Del(key interface{}) 13 } 14 15 func benchmarkMap(b *testing.B, hm Map) { 16 for i := 0; i < b.N; i++ { 17 var wg sync.WaitGroup 18 for i := 0; i < 100; i++ { 19 wg.Add(1) 20 go func() { 21 for i := 0; i < 100000; i++ { 22 hm.Set(strconv.Itoa(i), i*i) 23 hm.Set(strconv.Itoa(i), i*i) 24 hm.Del(strconv.Itoa(i)) 25 } 26 wg.Done() 27 }() 28 } 29 for i := 0; i < 100; i++ { 30 wg.Add(1) 31 go func() { 32 for i := 0; i < 100000; i++ { 33 hm.Get(strconv.Itoa(i)) 34 } 35 wg.Done() 36 }() 37 } 38 wg.Wait() 39 } 40 } 41 42 func BenchmarkSyncmap(b *testing.B) { 43 b.Run("map with RWLock", func(b *testing.B) { 44 hm := CreateRWLockMap() 45 benchmarkMap(b, hm) 46 }) 47 48 b.Run("sync.map", func(b *testing.B) { 49 hm := CreateSyncMapBenchmarkAdapter() 50 benchmarkMap(b, hm) 51 }) 52 53 b.Run("concurrent map", func(b *testing.B) { 54 superman := CreateConcurrentMapBenchmarkAdapter(199) 55 benchmarkMap(b, superman) 56 }) 57 }