Skip to content

Commit

Permalink
expvar: parallelize BenchmarkMapAdd{Same,Different}
Browse files Browse the repository at this point in the history
The other expvar tests are already parallelized, and this will help to
measure the impact of potential implementations for #18177.

updates #18177

Change-Id: I0f4f1a16a0285556cbcc8339855b6459af412675
Reviewed-on: https://go-review.googlesource.com/36717
Reviewed-by: Russ Cox <rsc@golang.org>
  • Loading branch information
Bryan C. Mills committed Feb 10, 2017
1 parent 066ac42 commit 39651bb
Showing 1 changed file with 34 additions and 13 deletions.
47 changes: 34 additions & 13 deletions src/expvar/expvar_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,14 @@ package expvar
import (
"bytes"
"encoding/json"
"fmt"
"net"
"net/http/httptest"
"reflect"
"runtime"
"strconv"
"sync"
"sync/atomic"
"testing"
)

Expand Down Expand Up @@ -219,23 +221,42 @@ func BenchmarkMapSet(b *testing.B) {
}

func BenchmarkMapAddSame(b *testing.B) {
for i := 0; i < b.N; i++ {
m := new(Map).Init()
m.Add("red", 1)
m.Add("red", 1)
m.Add("red", 1)
m.Add("red", 1)
}
m := new(Map).Init()
b.ResetTimer()

b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
m.Add("red", 1)
}
})
}

func BenchmarkMapAddDifferent(b *testing.B) {
for i := 0; i < b.N; i++ {
m := new(Map).Init()
m.Add("red", 1)
m.Add("blue", 1)
m.Add("green", 1)
m.Add("yellow", 1)
procKeys := make([][]string, runtime.GOMAXPROCS(0))
for i := range procKeys {
keys := make([]string, 4)
for j := range keys {
keys[j] = fmt.Sprint(i, j)
}
procKeys[i] = keys
}

m := new(Map).Init()
b.ResetTimer()

var n int32
b.RunParallel(func(pb *testing.PB) {
i := int(atomic.AddInt32(&n, 1)-1) % len(procKeys)
keys := procKeys[i]
j := 0

for pb.Next() {
m.Add(keys[j], 1)
if j++; j == len(keys) {
j = 0
}
}
})
}

func TestFunc(t *testing.T) {
Expand Down

0 comments on commit 39651bb

Please sign in to comment.