翻译进度
2
分块数量
2
参与人数

14.16. 标杆分析 Goroutines

这是一篇社区协同翻译的文章,你可以点击右边区块信息里的『改进』按钮向译者提交改进建议。

在 §13.7 章节,我们提到了 Go 函数中的性能基准测试原则。 在此我们将它应用于一个具体的范例之中:使用一个 goroutine 填充整数,然后再读取。测试中函数将被调用 N 次 (e.g. N = 1000000) 。基准测试中, BenchMarkResult 有一个 String() 方法用于输出结果。数值 N 由 gotest 决定,该值只有足够大才能判断出基准测试结果可靠合理。

基准测试同样适用于普通函数。

wilson_yang 翻译于 6个月前

如果想排除一部分代码或者更具体的测算时间,你可以适当使用testing.B.StopTimer()testing.B.StartTimer()来关闭或者启动计时器。只有所有测试全部通过,基准测试才会运行。

清单 14.18—benchmark_channels.go:

package main

import (

    "fmt"

    "testing"

)

func main() {

    fmt.Println("sync", testing.Benchmark(BenchmarkChannelSync).String())

    fmt.Println(“buffered”,

    testing.Benchmark(BenchmarkChannelBuffere

    d).String())

}

func BenchmarkChannelSync(b *testing.B) {

    ch := make(chan int)

    go func() {

        for i := 0; i < b.N; i++ {

            ch <- i

        }

        close(ch)

    }()

    for _ = range ch {

    }

}

/* Output:

Windows:        N       Time 1 op       Operations per sec
sync        1000000     2443 ns/op  --> 409 332 / s
buffered    1000000     4850 ns/op  --> 810 477 / s
Linux:

*/

wilson_yang 翻译于 6个月前

本文章首发在 GolangCaff
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

参与译者:2
讨论数量: 0
发起讨论


暂无话题~