Golang中的benchmark

2022-05-19  本文已影响0人  小餐包

知识点:

例子:

func benchmarkFib(i int, b *testing.B) {
        for n := 0; n < b.N; n++ {
                Fib(i)
        }
}
func BenchmarkFib1(b *testing.B)  { benchmarkFib(1, b) }
func BenchmarkFib2(b *testing.B)  { benchmarkFib(2, b) }
func BenchmarkFib3(b *testing.B)  { benchmarkFib(3, b) }
func BenchmarkFib10(b *testing.B) { benchmarkFib(10, b) }
func BenchmarkFib20(b *testing.B) { benchmarkFib(20, b) }
func BenchmarkFib40(b *testing.B) { benchmarkFib(40, b) }

得到结果:

BenchmarkFib1   1000000000               2.84 ns/op
BenchmarkFib2   500000000                7.92 ns/op
BenchmarkFib3   100000000               13.0 ns/op
BenchmarkFib10   5000000               447 ns/op
BenchmarkFib20     50000             55668 ns/op
BenchmarkFib40         2         942888676 ns/op

说明:

  • 第一列是执行的函数名称,第二列是总的执行次数,第三列是平均运行时间;

引申:

上面也可以用table driven的方式来运行多个case,这里类似于t.Run方法,需要使用 b.Run方法来执行多个case比如:

func BenchmarkFib(b *testing.B) {
    var table = []struct {
        input int
    }{
        {input: 10},
        {input: 20},
        {input: 50},
        {input: 100},
    }
    for _, v := range table {
        b.Run(fmt.Sprintf("input_size_%d", v.input), func(b *testing.B) {
            for i := 0; i < b.N; i++ {
                uniquePaths(v.input, v.input)
            }
        })
    }
}

参考文献:

上一篇 下一篇

猜你喜欢

热点阅读