diff options
| author | Trevor Strohman <trevor.strohman@gmail.com> | 2009-11-24 00:21:50 -0800 |
|---|---|---|
| committer | Trevor Strohman <trevor.strohman@gmail.com> | 2009-11-24 00:21:50 -0800 |
| commit | bf6a88e78a2275069fb4eacbbf69a65c344ad104 (patch) | |
| tree | cbd775b90e93026dabb52bf3a9d6e3eff1c3386a /src/pkg/sync/mutex_test.go | |
| parent | 3cb0c26b5715da56eb9c6b526038962d57fae6f9 (diff) | |
| download | golang-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.go | 50 |
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; +} |
