2016-08-23 97 views
0

https://golang.org/pkg/testing/中描述我们可以使用testing.B.RunParallel()函数来运行并行设置中的基准。我试着写简单的测试代码:Go-lang测试,Parallel Setting on Benchmark的含义是什么?

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()

+3

其含义在RunParallel方法的godoc中描述:https://golang.org/pkg/testing/#B.RunParallel。有什么特别的你不明白吗? –

+0

为什么我们使用RunParallel时速度较慢?没有它,我得到了0.3x ns/op,但RunParallel我得到了1.1x ns/op。这个平行基准如何工作? –

回答

0

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

RunParallel基准测试将可用线程之间的迭代分开。表现的计算方法与此类似,可能是对每组进行平均。重点在于几个(确切的说#基于你的GOMAXPROCS设置)测试迭代是同时运行的。这对于使用共享资源和锁定功能测试特别有用,它可以很好地独立运行,但在并发运行时引入性能问题。

0

这取决于什么有内部

SomeFunction() 

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