Current results on 2 core darwin/amd64:
BenchmarkGoroutineChain 351 ns/op
BenchmarkGoroutineChain-2 3840 ns/op
BenchmarkGoroutineChain-4 4040 ns/op
BenchmarkConcGoroutineChain 350 ns/op
BenchmarkConcGoroutineChain-2 875 ns/op
BenchmarkConcGoroutineChain-4 2027 ns/op
R=r, rsc
CC=golang-dev
https://golang.org/cl/
6332054
<-c
}
}
+
+func BenchmarkCreateGoroutines(b *testing.B) {
+ benchmarkCreateGoroutines(b, 1)
+}
+
+func BenchmarkCreateGoroutinesParallel(b *testing.B) {
+ benchmarkCreateGoroutines(b, runtime.GOMAXPROCS(-1))
+}
+
+func benchmarkCreateGoroutines(b *testing.B, procs int) {
+ c := make(chan bool)
+ var f func(n int)
+ f = func(n int) {
+ if n == 0 {
+ c <- true
+ return
+ }
+ go f(n - 1)
+ }
+ for i := 0; i < procs; i++ {
+ go f(b.N / procs)
+ }
+ for i := 0; i < procs; i++ {
+ <-c
+ }
+}