go benchmark踩坑
Apale 7/20/2021 golang
今天用go的benchmark的时候踩了个坑(其实是自己傻逼了)
背景如下: 写了个skiplist,想测试一下length在1e6时插入的性能
于是写出了如下代码:
func BenchmarkSkipListSet(b *testing.B) {
sl := NewDefaultSkipList()
cnt := 1000000
for i := 0; i < cnt; i++ {
sl.Set([]byte(utils.RandomAlphaString(10)), 1)
}
b.StartTimer()
for i := 0; i < b.N; i++ {
sl.Set([]byte(utils.RandomAlphaString(10)), 1)
}
b.StopTimer()
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
我想的是
计时器从b.StartTimer()开始计时,到b.StopTimer()结束计时
实际上
计时器从一开始就在计时,调用stop暂停,调用start继续 于是我就测出了单次插入花费10s,人都傻了_(¦3」∠)_
正确的代码
func BenchmarkSkipListSet(b *testing.B) {
b.StopTimer()//计时器暂停
sl := NewDefaultSkipList()
cnt := 1000000
for i := 0; i < cnt; i++ {
sl.Set([]byte(utils.RandomAlphaString(10)), 1)
}
b.StartTimer()//开启计时器
for i := 0; i < b.N; i++ {
sl.Set([]byte(utils.RandomAlphaString(10)), 1)
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12