aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDmitriy Vyukov <dvyukov@google.com>2014-07-17 21:49:45 +0400
committerDmitriy Vyukov <dvyukov@google.com>2014-07-17 21:49:45 +0400
commitdc84eca75eab04ec1a0c454ccf135ee9da10951e (patch)
tree4d2287c12bf1befe21f2061f0c688deb6f44666c /src
parent90870e61b7311a0c2b4d3059368cf75006157a50 (diff)
downloadgo-dc84eca75eab04ec1a0c454ccf135ee9da10951e.tar.xz
runtime: improve select benchmarks
1. Add select on sync channels benchmark. 2. Make channels in BenchmarkSelectNonblock shared. With GOMAXPROCS=1 it is the same, but with GOMAXPROCS>1 it becomes a more interesting benchmark. LGTM=khr R=golang-codereviews, khr CC=golang-codereviews https://golang.org/cl/115780043
Diffstat (limited to 'src')
-rw-r--r--src/pkg/runtime/chan_test.go38
1 files changed, 33 insertions, 5 deletions
diff --git a/src/pkg/runtime/chan_test.go b/src/pkg/runtime/chan_test.go
index ce4b396271..9ffdc07dc7 100644
--- a/src/pkg/runtime/chan_test.go
+++ b/src/pkg/runtime/chan_test.go
@@ -458,7 +458,35 @@ func BenchmarkSelectUncontended(b *testing.B) {
})
}
-func BenchmarkSelectContended(b *testing.B) {
+func BenchmarkSelectSyncContended(b *testing.B) {
+ myc1 := make(chan int)
+ myc2 := make(chan int)
+ myc3 := make(chan int)
+ done := make(chan int)
+ b.RunParallel(func(pb *testing.PB) {
+ go func() {
+ for {
+ select {
+ case myc1 <- 0:
+ case myc2 <- 0:
+ case myc3 <- 0:
+ case <-done:
+ return
+ }
+ }
+ }()
+ for pb.Next() {
+ select {
+ case <-myc1:
+ case <-myc2:
+ case <-myc3:
+ }
+ }
+ })
+ close(done)
+}
+
+func BenchmarkSelectAsyncContended(b *testing.B) {
procs := runtime.GOMAXPROCS(0)
myc1 := make(chan int, procs)
myc2 := make(chan int, procs)
@@ -476,11 +504,11 @@ func BenchmarkSelectContended(b *testing.B) {
}
func BenchmarkSelectNonblock(b *testing.B) {
+ myc1 := make(chan int)
+ myc2 := make(chan int)
+ myc3 := make(chan int, 1)
+ myc4 := make(chan int, 1)
b.RunParallel(func(pb *testing.PB) {
- myc1 := make(chan int)
- myc2 := make(chan int)
- myc3 := make(chan int, 1)
- myc4 := make(chan int, 1)
for pb.Next() {
select {
case <-myc1: