mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: add goroutine creation benchmark
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
This commit is contained in:
parent
809e06babc
commit
5a5e698c8f
1 changed files with 26 additions and 0 deletions
|
|
@ -123,3 +123,29 @@ func BenchmarkSyscallWork(b *testing.B) {
|
|||
<-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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue