Go-lang 测试,Benchmark 上的 Parallel Setting 是什么意思?

Wen*_*Adi 0 testing go

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

func BenchmarkFunctionSome(b *testing.B) {

    for i := 0; i < b.N; i++ {
        SomeFunction()
    }
}
Run Code Online (Sandbox Code Playgroud)

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

func BenchmarkFunctionSome(b *testing.B) {

    b.RunParallel(func(pb *testing.PB) {
        for pb.Next() {
            SomeFunction()
        }
    })
}
Run Code Online (Sandbox Code Playgroud)

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

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

小智 6

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

RunParallel 基准测试在可用线程之间划分迭代。性能的计算方法类似,可能对每个组求平均值。这样做的重点是同时运行多个(根据您的 GOMAXPROCS 设置精确#)测试迭代。这在测试具有共享资源和锁定的函数时特别有用,这些函数可能单独运行良好,但在并发运行时会引入性能问题。