Browse code

pkg/locker: add benchmarks

Signed-off-by: Alexander Morozov <lk4d4math@gmail.com>

Alexander Morozov authored on 2017/10/03 03:14:42
Showing 1 changed files
... ...
@@ -1,6 +1,8 @@
1 1
 package locker
2 2
 
3 3
 import (
4
+	"math/rand"
5
+	"strconv"
4 6
 	"sync"
5 7
 	"testing"
6 8
 	"time"
... ...
@@ -122,3 +124,38 @@ func TestLockerConcurrency(t *testing.T) {
122 122
 		t.Fatalf("lock should not exist: %v", ctr)
123 123
 	}
124 124
 }
125
+
126
+func BenchmarkLocker(b *testing.B) {
127
+	l := New()
128
+	for i := 0; i < b.N; i++ {
129
+		l.Lock("test")
130
+		l.Unlock("test")
131
+	}
132
+}
133
+
134
+func BenchmarkLockerParallel(b *testing.B) {
135
+	l := New()
136
+	b.SetParallelism(128)
137
+	b.RunParallel(func(pb *testing.PB) {
138
+		for pb.Next() {
139
+			l.Lock("test")
140
+			l.Unlock("test")
141
+		}
142
+	})
143
+}
144
+
145
+func BenchmarkLockerMoreKeys(b *testing.B) {
146
+	l := New()
147
+	var keys []string
148
+	for i := 0; i < 64; i++ {
149
+		keys = append(keys, strconv.Itoa(i))
150
+	}
151
+	b.SetParallelism(128)
152
+	b.RunParallel(func(pb *testing.PB) {
153
+		for pb.Next() {
154
+			k := keys[rand.Intn(len(keys))]
155
+			l.Lock(k)
156
+			l.Unlock(k)
157
+		}
158
+	})
159
+}