码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • benchmark性能测试


    目录
    • benchmark介绍
    • benchmark运行
    • benchmark运行参数
    • benchmark性能测试案例

    benchmark介绍

       基准测试主要是通过测试CPU和内存的效率问题,来评估被测试代码的性能,进而找到更好的解决方案。
    
       而Go语言中自带的benchmark则是一件非常神奇的测试利器。有了它,开发者可以方便快捷地在测试一个函数方法在串行或并行环境下的基准表现。指定一个时间(默认是1秒),看测试对象在达到或超过时间上限时,最多能被执行多少次和在此期间测试对象内存分配情况。
    
    1.基准测试代码文件必须是_test.go结尾,和单元测试一样;
    2.基准测试的函数以Benchmark开头;
    3.参数须为 *testing.B;
    4.基准测试函数不能有返回值;
    5.b.ResetTimer是重置计时器,这样可以避免for循环之前的初始化代码的干扰;
    6.b.StopTimer()停止计时器
    7.b.N是基准测试框架提供的,Go会根据系统情况生成,不用用户设定,表示循环的次数,因为需要反复调用测试的代码,才可以评估性能;
    

    benchmark运行

    go test -bench=. -benchmem
    
    
    输出解释:
    函数名后面的-8,表示运行时对应的 GOMAXPROCS 的值;
    1:代表循环次数
    9581522041:代表执行花费时间 (越少越好)
    5559464 B/op :代表分配了多少字节内存(越少越好)
    20522 allocs/op:代表发生了多少次不同的内存分配(越少越好)
    

    benchmark运行参数

    -benchtime=3s :指定运行时间
    -benchmem:显示分配内存大小,分配内存次数
    -cpu=4:指定cpu数量
    -count=2:指定运行次数
    

    benchmark性能测试案例

    测试目标:

    func demo1() {
       count := 0
       mux := sync.Mutex{}
       wg := sync.WaitGroup{}
       for i := 0; i < 10000; i++ {
          wg.Add(1)
          go func() {
             defer wg.Done()
             for j := 0; j < 10000; j++ {
                mux.Lock()
                count++
                mux.Unlock()
             }
          }()
       }
       wg.Wait()
    }
    
    func demo2() {
       wg := sync.WaitGroup{}
       var count int32 = 0
       for i := 0; i < 10000; i++ {
          wg.Add(1)
          go func() {
             defer wg.Done()
             for j := 0; j < 10000; j++ {
                atomic.AddInt32(&count, 1)
             }
          }()
       }
       wg.Wait()
    }
    

    main_test.go

    import (
    	"testing"
    )
    
    func BenchmarkDemo1(b *testing.B) {
    	b.ResetTimer()
    	demo1()
    	b.StopTimer()
    }
    
    func BenchmarkDemo2(b *testing.B) {
    	b.ResetTimer()
    	demo2()
    	b.StopTimer()
    }
    

    启动命令:go test -bench=. -benchmem

  • 相关阅读:
    面试官问,1x1 的卷积有什么用?
    2、JSP——配置Tomcat服务器
    R语言使用plot函数可视化数据散点图,使用col参数自定义设置数据点的颜色、设置参数为颜色编码
    非功能性需求:质量
    Vue + Volo.Abp 实现OAuth2.0客户端授权模式认证
    Spring Security 6.0 中的新增功能
    uniapp+vue3使用pinia,安卓端报错白屏
    01-go基础-07-map(声明map、初始化map、map赋值、遍历map、判断key是否在map中、删除map成员)
    PyTorch使用多GPU并行训练及其原理和注意事项
    Docker安装Redis并使用Another Redis Desktop Manager连接
  • 原文地址:https://www.cnblogs.com/guyouyin123/p/16565645.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号