在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 设置精确#)测试迭代。这在测试具有共享资源和锁定的函数时特别有用,这些函数可能单独运行良好,但在并发运行时会引入性能问题。