当前位置: 首页 > news >正文

go-基准测试

基准测试

Demo

// fib_test.go
package mainimport "testing"func BenchmarkFib(b *testing.B) {for n := 0; n < b.N; n++ {fib(30) // run fib(30) b.N times}
}func fib(n int) int {if n == 0 || n == 1 {return n}return fib(n-2) + fib(n-1)
}
  • benchmark 和普通的单元测试用例一样,都位于 _test.go 文件中。
  • 函数名以 Benchmark 开头,参数是 b *testing.B。和普通的单元测试用例很像,单元测试函数名以 Test 开头,参数是 t *testing.T

执行基准测试

  • go test 命令默认不运行 benchmark 用例的,如果我们想运行 benchmark 用例,则需要加上 -bench 参数。

    $ go test -bench="$Fib" . // 通过-bench指定测试函数,或者通过正则匹配一类函数,比如说`-bench='Fib$'`
    goos: windows
    goarch: amd64
    pkg: gan
    cpu: Intel(R) Core(TM) i5-10400 CPU @ 2.90GHz
    BenchmarkFib-12              306           3925085 ns/op
    PASS
    ok      gan     2.218s
    
  • 如果想使用多个cpu执行

    $ go test -bench='Fib$' -cpu=2,4 .
    
  • 如果想提高测试时间和次数

    $ go test -bench='Fib$' -benchtime=50x .  //执行50次
    $ go test -bench='Fib$' -benchtime=5s .  //执行5s
    $ go test -bench='Fib$' -benchtime=5s -count=3 . //执行5s,一共执行3轮
    
  • 查看内存分配情况

    $ go test -bench='Fib$' -benchmem .
    

去除干扰因素

  • 重置计时器

    func BenchmarkFib(b *testing.B) {time.Sleep(time.Second * 3) // 模拟耗时准备任务b.ResetTimer() // 重置定时器for n := 0; n < b.N; n++ {fib(30) // run fib(30) b.N times}
    }
    
  • 去除准备和后置处理工作耗时影响

    func BenchmarkBubbleSort(b *testing.B) {for n := 0; n < b.N; n++ {b.StopTimer()nums := generateWithCap(10000)b.StartTimer()bubbleSort(nums)}
    }
    

参考: https://geektutu.com/post/hpg-benchmark.html

http://www.lryc.cn/news/398704.html

相关文章:

  • 线性代数|机器学习-P23梯度下降
  • SQL,python,knime将数据混合的文字数字拆出来,合并计算实战
  • mac ssh连接工具
  • 阿里通义音频生成大模型 FunAudioLLM 开源
  • 通用详情页的打造
  • java内部类的本质
  • vue3 学习笔记08 -- computed 和 watch
  • Python-PLAXIS自动化建模技术与典型岩土工程案例
  • license系统模型设计使用django models
  • 【通信协议-RTCM】MSM语句(1) - 多信号GNSS观测数据消息格式
  • vue3-vite-pinia模板
  • 华为HCIP Datacom H12-821 卷38
  • C语言求10进制转2进制(除2取余法)
  • PHP 调用淘宝详情 API 接口的方法与实践
  • 风景区服务热线系统:智能化时代的旅游新选择
  • Linux修改配置文件后无法使用命令或无法进入桌面
  • 安卓14中Zygote初始化流程及源码分析
  • 等保一体机 | 什么是等保一体机?一台机器就能过等保吗?
  • 【活动预告】Apache IoTDB TsFile 智慧能源应用“上会”啦!
  • 【公益案例展】中国电信安全大模型——锻造安全行业能量转化的高性能引擎...
  • CV07_深度学习模块之间的缝合教学(2)--维度转换
  • Oracle字符集修改
  • k8s核心操作_k8s中的存储抽象_基本概念与NFS搭建_Deployment使用NFS进行挂载---分布式云原生部署架构搭建028
  • 数学建模·熵权法
  • 开放开源开先河(一)
  • 美团收银Android一面凉经(2024)
  • 触发器练习
  • Hadoop-25 Sqoop迁移 增量数据导入 CDC 变化数据捕获 差量同步数据 触发器 快照 日志
  • Facebook社交平台的未来发展趋势分析
  • 构建Memcached帝国:分布式部署策略与实践指南