summaryrefslogtreecommitdiff
path: root/src/pkg/sync/mutex_test.go
diff options
context:
space:
mode:
authorTrevor Strohman <trevor.strohman@gmail.com>2009-11-24 00:21:50 -0800
committerTrevor Strohman <trevor.strohman@gmail.com>2009-11-24 00:21:50 -0800
commitbf6a88e78a2275069fb4eacbbf69a65c344ad104 (patch)
treecbd775b90e93026dabb52bf3a9d6e3eff1c3386a /src/pkg/sync/mutex_test.go
parent3cb0c26b5715da56eb9c6b526038962d57fae6f9 (diff)
downloadgolang-bf6a88e78a2275069fb4eacbbf69a65c344ad104.tar.gz
Add benchmarks for commonly used routines.
R=rsc, r, r1 http://codereview.appspot.com/160046 Committer: Russ Cox <rsc@golang.org>
Diffstat (limited to 'src/pkg/sync/mutex_test.go')
-rw-r--r--src/pkg/sync/mutex_test.go50
1 files changed, 44 insertions, 6 deletions
diff --git a/src/pkg/sync/mutex_test.go b/src/pkg/sync/mutex_test.go
index 72c9c4342..05fef786a 100644
--- a/src/pkg/sync/mutex_test.go
+++ b/src/pkg/sync/mutex_test.go
@@ -12,8 +12,8 @@ import (
"testing";
)
-func HammerSemaphore(s *uint32, cdone chan bool) {
- for i := 0; i < 1000; i++ {
+func HammerSemaphore(s *uint32, loops int, cdone chan bool) {
+ for i := 0; i < loops; i++ {
runtime.Semacquire(s);
runtime.Semrelease(s);
}
@@ -25,16 +25,36 @@ func TestSemaphore(t *testing.T) {
*s = 1;
c := make(chan bool);
for i := 0; i < 10; i++ {
- go HammerSemaphore(s, c)
+ go HammerSemaphore(s, 1000, c)
}
for i := 0; i < 10; i++ {
<-c
}
}
+func BenchmarkUncontendedSemaphore(b *testing.B) {
+ s := new(uint32);
+ *s = 1;
+ HammerSemaphore(s, b.N, make(chan bool, 2));
+}
+
+func BenchmarkContendedSemaphore(b *testing.B) {
+ b.StopTimer();
+ s := new(uint32);
+ *s = 1;
+ c := make(chan bool);
+ runtime.GOMAXPROCS(2);
+ b.StartTimer();
+
+ go HammerSemaphore(s, b.N/2, c);
+ go HammerSemaphore(s, b.N/2, c);
+ <-c;
+ <-c;
+}
-func HammerMutex(m *Mutex, cdone chan bool) {
- for i := 0; i < 1000; i++ {
+
+func HammerMutex(m *Mutex, loops int, cdone chan bool) {
+ for i := 0; i < loops; i++ {
m.Lock();
m.Unlock();
}
@@ -45,9 +65,27 @@ func TestMutex(t *testing.T) {
m := new(Mutex);
c := make(chan bool);
for i := 0; i < 10; i++ {
- go HammerMutex(m, c)
+ go HammerMutex(m, 1000, c)
}
for i := 0; i < 10; i++ {
<-c
}
}
+
+func BenchmarkUncontendedMutex(b *testing.B) {
+ m := new(Mutex);
+ HammerMutex(m, b.N, make(chan bool, 2));
+}
+
+func BenchmarkContendedMutex(b *testing.B) {
+ b.StopTimer();
+ m := new(Mutex);
+ c := make(chan bool);
+ runtime.GOMAXPROCS(2);
+ b.StartTimer();
+
+ go HammerMutex(m, b.N/2, c);
+ go HammerMutex(m, b.N/2, c);
+ <-c;
+ <-c;
+}