From cffbf44e851f1a2068ae6273eb8795031c3b6fad Mon Sep 17 00:00:00 2001 From: Tyler Bunnell Date: Mon, 19 May 2014 20:55:34 -0600 Subject: [PATCH] Add mutex benchmark --- context_test.go | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/context_test.go b/context_test.go index e1dca3b..36975d7 100644 --- a/context_test.go +++ b/context_test.go @@ -85,3 +85,52 @@ func TestContext(t *testing.T) { Clear(r) assertEqual(len(data), 0) } + +func parallelReader(r *http.Request, key string, iterations int, wait, done chan struct{}) { + <-wait + for i := 0; i < iterations; i++ { + Get(r, key) + } + done <- struct{}{} + +} + +func parallelWriter(r *http.Request, key, value string, iterations int, wait, done chan struct{}) { + <-wait + for i := 0; i < iterations; i++ { + Get(r, key) + } + done <- struct{}{} + +} + +func BenchmarkMutex(b *testing.B) { + + b.StopTimer() + r, _ := http.NewRequest("GET", "http://localhost:8080/", nil) + done := make(chan struct{}) + numWriters := 64 + numReaders := numWriters * 8 + iterations := 128 + b.StartTimer() + + for i := 0; i < b.N; i++ { + wait := make(chan struct{}) + + for i := 0; i < numReaders; i++ { + go parallelReader(r, "test", iterations, wait, done) + } + + for i := 0; i < numWriters; i++ { + go parallelWriter(r, "test", "123", iterations, wait, done) + } + + close(wait) + + for i := 0; i < numReaders+numWriters; i++ { + <-done + } + + } + +}