在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()
,为什么会变慢?
答案 0 :(得分:1)
第一个基准测试中的for循环使所有测试按顺序运行,一次一个,性能是时间除以迭代次数。
RunParallel基准测试将可用线程之间的迭代分开。性能计算类似,可能平均每组。这一点是几个(确切的#基于您的GOMAXPROCS设置)测试迭代同时运行。这对于使用共享资源和锁定测试函数特别有用,它可以单独运行,但在并发运行时会引入性能问题。
答案 1 :(得分:0)
这取决于里面的内容
SomeFunction()
如果它只是一个空函数或简单计算,串行基准测试会更快。但如果这是一个繁重的计算或IO,
RunParallel()
基准将更快。