From dc84eca75eab04ec1a0c454ccf135ee9da10951e Mon Sep 17 00:00:00 2001 From: Dmitriy Vyukov Date: Thu, 17 Jul 2014 21:49:45 +0400 Subject: [PATCH] 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 --- src/pkg/runtime/chan_test.go | 38 +++++++++++++++++++++++++++++++----- 1 file 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: -- 2.48.1