Testing Go lang测试,在基准上并行设置的意义是什么?

Testing Go lang测试,在基准上并行设置的意义是什么?,testing,go,Testing,Go,在本文中,我们可以使用testing.B.RunParallel()函数在并行设置中运行基准测试。我尝试编写简单的测试代码: func BenchmarkFunctionSome(b *testing.B) { for i := 0; i < b.N; i++ { SomeFunction() } } 使用RunParallel()的测试比第一个基准测试慢 实际上,基准测试中平行设置的含义是什么?为什么如果我使用RunParallel(),速度会变慢?第

在本文中,我们可以使用
testing.B.RunParallel()
函数在并行设置中运行基准测试。我尝试编写简单的测试代码:

func BenchmarkFunctionSome(b *testing.B) {

    for i := 0; i < b.N; i++ {
        SomeFunction()
    }
}
使用
RunParallel()
的测试比第一个基准测试慢


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

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


RunParallel基准将迭代划分为可用线程。性能的计算方法类似,可能是平均每组。这一点是,几个(精确的#基于您的GOMAXPROCS设置)测试迭代同时运行。这在测试具有共享资源和锁定的函数时特别有用,这些函数单独运行可能会很好,但在并发运行时会带来性能问题。

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


RunParallel基准将迭代划分为可用线程。性能的计算方法类似,可能是平均每组。这一点是,几个(精确的#基于您的GOMAXPROCS设置)测试迭代同时运行。这在测试具有共享资源和锁定的功能时特别有用,这些功能单独运行可能会很好,但同时运行时会带来性能问题。

这取决于其中的内容

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

RunParallel()

基准测试会更快。

这取决于里面有什么

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

RunParallel()

基准测试将更快。

其含义在运行并行方法的godoc中描述:。有什么你不明白的地方吗?为什么我们使用RunParallel时速度较慢?没有它,我得到了0.3x ns/op,但是使用RunParallel,我得到了1.1x ns/op。这个并行基准是如何工作的?如果你并行运行基准,每个go例程将相互“竞争”。因此它会稍微慢一点,其含义在godoc中对RunParallel方法进行了描述:。有什么你不明白的地方吗?为什么我们使用RunParallel时速度较慢?没有它,我得到了0.3x ns/op,但是使用RunParallel,我得到了1.1x ns/op。这个并行基准是如何工作的?如果你并行运行基准,每个go例程将相互“竞争”。所以会稍微慢一点