github.com/loov/combiner@v0.1.0/combine_test.go (about) 1 package combiner_test 2 3 import ( 4 "sync" 5 "testing" 6 7 "github.com/loov/combiner" 8 ) 9 10 type Nop struct{} 11 12 func (n *Nop) Start() {} 13 func (n *Nop) Do(arg interface{}) {} 14 func (n *Nop) Finish() {} 15 16 func BenchmarkSpinningNopUncontended(b *testing.B) { 17 var q combiner.Spinning 18 q.Init(&Nop{}, 256) 19 for i := 0; i < b.N; i++ { 20 q.Do(nil) 21 } 22 } 23 24 func BenchmarkSpinningNopContended(b *testing.B) { 25 var q combiner.Spinning 26 q.Init(&Nop{}, 256) 27 b.RunParallel(func(pb *testing.PB) { 28 for pb.Next() { 29 q.Do(nil) 30 } 31 }) 32 } 33 func BenchmarkLockNopUncontended(b *testing.B) { 34 var mu sync.Mutex 35 for i := 0; i < b.N; i++ { 36 mu.Lock() 37 { 38 // intentionally empty section 39 } 40 mu.Unlock() 41 } 42 } 43 44 func BenchmarkLockNopContended(b *testing.B) { 45 var mu sync.Mutex 46 b.RunParallel(func(pb *testing.PB) { 47 for pb.Next() { 48 mu.Lock() 49 { 50 // intentionally empty section 51 } 52 mu.Unlock() 53 } 54 }) 55 } 56 func BenchmarkParkingNopUncontended(b *testing.B) { 57 var q combiner.Parking 58 q.Init(&Nop{}, 256) 59 for i := 0; i < b.N; i++ { 60 q.Do(nil) 61 } 62 } 63 64 func BenchmarkParkingNopContended(b *testing.B) { 65 var q combiner.Parking 66 q.Init(&Nop{}, 256) 67 b.RunParallel(func(pb *testing.PB) { 68 for pb.Next() { 69 q.Do(nil) 70 } 71 }) 72 }