Go的基准测试

在这里插入图片描述

基准测试(Benchmark)是一项用于测量和评估软件性能指标的方法,主要用于评估你写的代码的性能。

  • 基准测试的代码文件必须以_test.go结尾
  • 基准测试的函数必须以Benchmark开头,必须是可导出的
  • 基准测试函数必须接受一个指向Benchmark类型的指针作为唯一参数
  • 基准测试函数不能有返回值
  • b.ResetTimer是重置计时器,这样可以避免for循环之前的初始化代码的干扰
  • 最后的for循环很重要,被测试的代码要放到循环里
  • b.N是基准测试框架提供的,表示循环的次数,因为需要反复调用测试的代码,才可以评估性能

-benchmem可以提供每次操作分配内存的次数

  1. 参数-bench,它指明要测试的函数;点字符意思是测试当前所有以Benchmark为前缀函数
  2. 参数-benchmem,性能测试的时候显示测试函数的内存分配大小,内存分配次数的统计信息
  3. 参数-count n,运行测试和性能多少此,默认一次

基准测试: 基准测试就是在一定的工作负载之下检测程序性能的一种方法

go test -bench=. -benchmem 不指定参数,就是当前目录运行所有测试文件
go test -bench=Split(方法名) 只有前三个参数
go test -bench=Split -benchmem ,会有以下五个参数BenchmarkSplit-4                 600084              1928 ns/op             432 B/op          2 allocs/op(1)BenchmarkSplit-4 表示对Split函数进行基准测试,数字4表示GOMAXPROCS的值,这个对于并发基准测试很重要。
(2)600084 表示循环次数,即b.N的值
(3)1928 ns/op  600084/op 表示每次调用Split函数耗时172ns,这个结果是600084次调用的平均值
(4)432 B/op 表示每次操作内存分配了96字节
(5)2 allocs/op 则表示每次操作进行了1次内存分配。

在 Go 中,基准测试(Benchmark)是通过 testing 包来实现的。

基准测试的目的是测量一段代码的性能,通常是一个函数的执行时间。

以下是一个示例,演示如何使用基准测试来测试一个简单的 HTTP 处理器的性能:

package mainimport ("net/http""net/http/httptest""testing"
)// 要测试的处理器
func myHandler(w http.ResponseWriter, r *http.Request) {// 模拟处理时间// 此处可以放入你的实际处理逻辑
}// 基准测试函数
func BenchmarkMyHandler(b *testing.B) {// 创建一个模拟 HTTP 请求req, err := http.NewRequest("GET", "/", nil)if err != nil {b.Fatal(err)}// 在基准测试中,使用 b.N 来确定要运行的迭代次数for i := 0; i < b.N; i++ {// 使用 httptest 包创建一个 ResponseRecorder (实现了 http.ResponseWriter)rr := httptest.NewRecorder()// 记录基准测试开始时间b.StartTimer()// 模拟处理器的处理myHandler(rr, req)// 记录基准测试结束时间b.StopTimer()// 在这里你可以添加逻辑,例如记录响应时间、输出日志等}
}func main() {// 运行基准测试testing.Benchmark(BenchmarkMyHandler)
}

在这个示例中,myHandler 是你要测试的处理器。BenchmarkMyHandler 函数中,我们使用 b.N 来确定要运行的迭代次数。在每个迭代中,我们使用 httptest 包创建了一个 ResponseRecorder 来记录响应,然后计算了处理时间。

运行基准测试:

go test -bench=.

这将输出一些关于基准测试结果的信息,包括每次迭代的平均执行时间等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/434565.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Docker】nacos集群搭建Nginx负载均衡

目录 一、mysql安装与基操 1.1 数据准备 1.2 创建mysql与数据表 二、Nacos集群部署 2.1 创建nacos及配置 2.2 创建Nginx容器 一、mysql安装与基操 1.1 数据准备 拉取mysql docker pull mysql:5.7(版本) 定义挂载目录 mkdir -p /mysql/{conf,data,script} 配置my.c…

37、WEB攻防——通用漏洞XSS跨站权限维持捆绑钓鱼浏览器漏洞

文章目录 XSS——后台植入Cookie&表单劫持&#xff08;获取明文密码&#xff09;XSS——Flash钓鱼配合MSF捆绑上线XSS——浏览器网马配合MSF访问上线 要想获取有效的cookie&#xff0c;需要&#xff1a;1、网站本身采用cookie进行验证&#xff1b;2、网站未做http-only等的…

[AG32VF407]国产MCU+FPGA 使用I2C测试陀螺仪MPU6050

视频讲解 [AG32VF407]国产MCUFPGA 使用I2C测试陀螺仪MPU6050 实验过程 查看原理图中定义的I2C的管脚&#xff0c;PB0和PB1 在board.ve中定义的引脚功能 I2C0_SDA PIN_36 I2C0_SCL PIN_35新建工程 测试代码 #include "board.h"#define MIN_IRQ_PRIORITY 1 #define …

一行命令在 wsl-ubuntu 中使用 Docker 启动 Windows

在 wsl-ubuntu 中使用 Docker 启动 Windows 0. 背景1. 验证我的系统是否支持 KVM&#xff1f;2. 使用 Docker 启动 Windows3. 访问 Docker 启动的 Windows4. Docker Hub 地址5. Github 地址 0. 背景 我们可以在 Windows 系统使用安装 wsl-ubuntu&#xff0c;今天玩玩在 wsl-ub…

Ubuntu系统中部署C++环境与Visual Studio Code软件

本文介绍在Linux Ubuntu操作系统下,配置Visual Studio Code软件与C++代码开发环境的方法。 在文章VMware虚拟机部署Linux Ubuntu系统的方法中,我们介绍了Linux Ubuntu操作系统的下载、安装方法;本文则基于前述基础,继续介绍在Linux Ubuntu操作系统中配置Visual Studio Code…

【深度学习:t-SNE 】T 分布随机邻域嵌入

【深度学习&#xff1a;t-SNE 】T 分布随机邻域嵌入 降低数据维度的目标什么是PCA和t-SNE&#xff0c;两者有什么区别或相似之处&#xff1f;主成分分析&#xff08;PCA&#xff09;t-分布式随机邻域嵌入&#xff08;t-SNE&#xff09; 在 MNIST 数据集上实现 PCA 和 t-SNE结论…

企业培训革新:在线教育系统源码的全面解析

如今&#xff0c;在线教育系统的兴起为企业提供了全新的解决方案&#xff0c;使得培训不再受到时间和地域的限制。 一、在线教育系统的关键组成 在线教育系统的源码包含众多关键组成部分&#xff0c;其中包括&#xff1a; 1.1用户管理模块 用户管理模块负责管理学员和教员的…

单片机学习笔记---独立按键控制LED亮灭

直接进入正题&#xff01; 今天开始我们要学习一个新的模块&#xff1a;独立按键&#xff01; 先说独立按键的内部结构&#xff1a; 它相当于一种电子开关&#xff0c;按下时开关接通&#xff0c;松开时开关断开&#xff0c;实现原理是通过轻触按键内部的金属弹片受力弹动来实…

Leetcode—114. 二叉树展开为链表【中等】

2023每日刷题&#xff08;九十八&#xff09; Leetcode—114. 二叉树展开为链表 Morris-like算法思想 可以发现展开的顺序其实就是二叉树的先序遍历。算法和 94 题中序遍历的 Morris 算法有些神似&#xff0c;我们需要两步完成这道题。 将左子树插入到右子树的地方将原来的右…

JVM系列-7内存调优

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring原理、JUC原理、Kafka原理、分布式技术原理、数据库技术、JVM原理&#x1f525;如果感觉博主的文…

鸿蒙开发初体验

文章目录 前言一、环境配置1.1 安装DevEco Studio1.2 安装相关环境 二、工程创建三、工程结构介绍四、代码实现4.1 初识ArkTs4.2 具体实现 参考资料 前言 HarmonyOS是华为公司推出的一种操作系统&#xff0c;旨在为不同设备提供统一的操作系统和开发平台。鸿蒙开发的出现为用户…

CSS优先级内容

定义CSS样式时&#xff0c;经常出现两个或多个样式规则应用在同一元素的情况&#xff0c;这时就会出现优先级的情况&#xff0c;那么应用的元素应该显示哪一个样式呢&#xff1f; 一.下面举例对优先级进行具体讲解。 p{color:red;} .blue{color:orange;} #header{color:blu…