Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@jiacai2050
Last active September 10, 2019 02:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jiacai2050/f89dff0e24cbf95b4490c1dce6af74c1 to your computer and use it in GitHub Desktop.
Save jiacai2050/f89dff0e24cbf95b4490c1dce6af74c1 to your computer and use it in GitHub Desktop.
go defer benchmark 1.12 vs 1.13
package defer_demo
import (
"testing"
)
func doDefer() int {
acc := 0
for i := 0; i < 100; i++ {
defer func(i int) {
acc += i
}(i)
}
return acc
}
func noDefer() int {
acc := 0
for i := 0; i < 100; i++ {
func(i int) {
acc += i
}(i)
}
return acc
}
var blackhole int
func BenchmarkDefer(b *testing.B) {
s := 1
for i := 0; i < b.N; i++ {
s = doDefer()
}
blackhole = s
}
var result int
func BenchmarkNoDefer(b *testing.B) {
s := 1
for i := 0; i < b.N; i++ {
s = noDefer()
}
result = s
}
# go test -v -bench=. -benchmem
go version go1.13 darwin/amd64
BenchmarkDefer-8 255255 4291 ns/op 8 B/op 1 allocs/op
BenchmarkNoDefer-8 9560637 123 ns/op 0 B/op 0 allocs/op
go version go1.12.1 darwin/amd64
BenchmarkDefer-8 300000 4340 ns/op 8 B/op 1 allocs/op
BenchmarkNoDefer-8 10000000 125 ns/op 0 B/op 0 allocs/op
@jiacai2050
Copy link
Author

package defer_demo

import (
	"testing"
)

func doDefer() int {
	acc := 0
	defer func(i int) {
		acc += i
	}(1)
	defer func(i int) {
		acc += i
	}(1)
	return acc
}

func noDefer() int {
	acc := 0
	func(i int) {
		acc += i
	}(1)
	func(i int) {
		acc += i
	}(1)
	return acc
}

var blackhole int

func BenchmarkDefer(b *testing.B) {
	s := 1
	for i := 0; i < b.N; i++ {
		s = doDefer()
	}
	blackhole = s
}

var result int

func BenchmarkNoDefer(b *testing.B) {
	s := 1
	for i := 0; i < b.N; i++ {
		s = noDefer()
	}

	result = s
}

1.12

BenchmarkDefer-8        20000000                81.7 ns/op             0 B/op          0 allocs/op
BenchmarkNoDefer-8      2000000000               1.39 ns/op            0 B/op          0 allocs/op

1.13

BenchmarkDefer-8        19694089                57.9 ns/op             0 B/op          0 allocs/op
BenchmarkNoDefer-8      1000000000               1.12 ns/op            0 B/op          0 allocs/op

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment