]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: improve select benchmarks
authorDmitriy Vyukov <dvyukov@google.com>
Thu, 17 Jul 2014 17:49:45 +0000 (21:49 +0400)
committerDmitriy Vyukov <dvyukov@google.com>
Thu, 17 Jul 2014 17:49:45 +0000 (21:49 +0400)
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

index ce4b3962717f612585d5c8820b77be1ec29c7e13..9ffdc07dc7293c5b97ddd8c9bb10fb7d1e4dcd05 100644 (file)
@@ -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: