go入门教程- 14.16 对Go协程进行基准测试

  1. 14.16 对Go协程进行基准测试
    1. 链接

14.16 对Go协程进行基准测试

13.7 节 我们提到了在Go语言中对你的函数进行基准测试。在此我们将其应用到一个用协程向通道写入整数再读出的实例中。这个函数将通过testing.Benchmark调用N次(例如:N = 1,000,000),BenchMarkResult有一个String()方法来输出其结果。N的值将由gotest来判断并取得一个足够大的数字,以获得合理的基准测试结果。当然同样的基准测试方法也适用于普通函数。

如果你想排除指定部分的代码或者更具体的指定要测试的部分,可以使用testing.B.startTimer()testing.B.stopTimer()来开始或结束计时器。基准测试只有在所有的测试通过后才能运行!

示例:14.18-benchmark_channels.go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package main

import (
"fmt"
"testing"
)

func main() {
fmt.Println(" sync", testing.Benchmark(BenchmarkChannelSync).String())
fmt.Println("buffered", testing.Benchmark(BenchmarkChannelBuffered).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 {
}
}

func BenchmarkChannelBuffered(b *testing.B) {
ch := make(chan int, 128)
go func() {
for i := 0; i < b.N; i++ {
ch <- i
}
close(ch)
}()
for range ch {
}
}

输出:

1
2
3
4
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:

链接


免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 [email protected]

推荐阅读:

文章标题:go入门教程- 14.16 对Go协程进行基准测试

本文作者:知识铺

发布时间:2019-10-15, 22:30:20

最后更新:2019-10-16, 21:00:35

原始链接:https://blog.zshipu.com/2019/10/15/golang/20191015/14.16/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏