Go-lang Testing,Bench Setting on Benchmark是什么意思?

时间:2016-08-23 15:11:33

标签: testing go

https://golang.org/pkg/testing/中,我们可以使用testing.B.RunParallel()函数在并行设置中运行基准测试。我试着编写简单的测试代码:

func BenchmarkFunctionSome(b *testing.B) {

    for i := 0; i < b.N; i++ {
        SomeFunction()
    }
}

然后我将其更改为使用RunParallel()

func BenchmarkFunctionSome(b *testing.B) {

    b.RunParallel(func(pb *testing.PB) {
        for pb.Next() {
            SomeFunction()
        }
    })
}

使用RunParallel()的那个比第一个基准慢。

实际上,基准测试中并行设置的含义是什么?如果我使用RunParallel(),为什么会变慢?

2 个答案:

答案 0 :(得分:1)

第一个基准测试中的for循环使所有测试按顺序运行,一次一个,性能是时间除以迭代次数。

RunParallel基准测试将可用线程之间的迭代分开。性能计算类似,可能平均每组。这一点是几个(确切的#基于您的GOMAXPROCS设置)测试迭代同时运行。这对于使用共享资源和锁定测试函数特别有用,它可以单独运行,但在并发运行时会引入性能问题。

答案 1 :(得分:0)

这取决于里面的内容

SomeFunction()

如果它只是一个空函数或简单计算,串行基准测试会更快。但如果这是一个繁重的计算或IO,

RunParallel()

基准将更快。