首页 > 其他分享 >GO基准测试

GO基准测试

时间:2023-05-26 17:25:03浏览次数:23  
标签:Nanoseconds && 基准 prevns 次数 benchTime 测试 GO 上次

如何确定N的循环次数

不变量:时间,一般为1s,可以外部运行时指定

关键代码

func (b *B) launch() {
	// Signal that we're done whether we return normally
	// or by FailNow's runtime.Goexit.
	defer func() {
		b.signal <- true
	}()

	// Run the benchmark for at least the specified amount of time.
	if b.benchTime.n > 0 {
		// We already ran a single iteration in run1.
		// If -benchtime=1x was requested, use that result.
		// See https://golang.org/issue/32051.
		if b.benchTime.n > 1 {
			b.runN(b.benchTime.n)
		}
	} else {
		d := b.benchTime.d
		for n := int64(1); !b.failed && b.duration < d && n < 1e9; {
			last := n
			// Predict required iterations.
			goalns := d.Nanoseconds()
			prevIters := int64(b.N)
			prevns := b.duration.Nanoseconds()
			if prevns <= 0 {
				// Round up, to avoid div by zero.
				prevns = 1
			}
			// Order of operations matters.
			// For very fast benchmarks, prevIters ~= prevns.
			// If you divide first, you get 0 or 1,
			// which can hide an order of magnitude in execution time.
			// So multiply first, then divide.
			n = goalns * prevIters / prevns 
			// Run more iterations than we think we'll need (1.2x).
			n += n / 5
			// Don't grow too fast in case we had timing errors previously.
			n = min(n, 100*last)
			// Be sure to run at least one more than last time.
			n = max(n, last+1)
			// Don't run more than 1e9 times. (This also keeps n in int range on 32 bit platforms.)
			n = min(n, 1e9)
			b.runN(int(n))
		}
	}
	b.result = BenchmarkResult{b.N, b.duration, b.bytes, b.netAllocs, b.netBytes, b.extra}
}
  1. 先用总执行时间*上次执行次数 / 上次执行时间
  2. 增加 20%的次数
  3. 每次增加执行次数不操作上次的 100 倍
  4. 至少要比上次多 1 次
  5. 不能操作 1的9次方 10亿次

标签:Nanoseconds,&&,基准,prevns,次数,benchTime,测试,GO,上次
From: https://www.cnblogs.com/sooooooul/p/17435290.html

相关文章

  • Django——AJAX
    AJAX(AsynchronousJavascriptAndXML)翻译成中文就是“异步的Javascript和XML”。AJAX不是新的编程语言,而是一种使用现有标准的新方法。使用Javascript语言与服务器进行异步交互的,并进行局部刷新。传输的数据为XML(当然,传输的数据不只是XML)AJAX最大的优点是在不重新加载整个......
  • 一个基于epoll的服务器压力测试的小程序
    #include<stdlib.h>#include<stdio.h>#include<assert.h>#include<unistd.h>#include<sys/types.h>#include<sys/epoll.h>#include<fcntl.h>#include<sys/socket.h>#include<netinet/in.h>#include......
  • 使用JMeter进行一次简单的带json数据的post请求测试,json可配置参数
    配置:1、新建一个线程组:然后设置线程数、运行时间、重复次数。2、新建Http请求:设置服务器域名,路径,方法,编码格式,数据内容。可以在函数助手中,编辑所需要的变量,比如本例中的随机生成电话号码。3、添加HTTP信息头管理器然后信息头添加一条名称为Content-Type,值为application/json即可......
  • 有关素数的基础算法 素性测试 埃氏筛法
    所谓素数,是指恰好有两个约数的正整数。因为n的约数都小于n,所以只需要检查2~ n-1之间所有的整数是否整除n就能判定n是不是素数。如果d是n的约数,那么n/d也是n的约数。由n=d*n/d可知min(d,n/d)  ,所以只需要检查2~ 之间的所有整数就足够了。同理可知,整数分解和约数枚举都......
  • Go 语言 - 自定义 log
    Go语言-自定义logCode/go/go_log_demovia......
  • 1111.Django后台
    一、diango后台在项目的目录下我们会看到这样一个url的配置,你有自己去访问这个url地址吗?访问之后发现了什么呢?其实就是django的后台登录界面。前端访问 127.0.0.1:8000/admin/之后就会进入django的后台登录界面。1.Django管理界面为你的员工或客户生成一个用户添加,修改和......
  • JMeter04-性能测试流程之准备步骤
    性能测试流程性能需求分析测试人员需要与需求人员(客户)、领导及项目相关人员进行沟通,同时收集各种项目资料,对系统进行分析,确认测试的意图;确认客户对性能的态度;重点关注的性能指标。某系统需求中性能部分的说明如下要掌握哪些性能测试需求系统响应时间要求每秒完成的业......
  • 自动化测试
    自动化测试是指通过专门的自动化测试工具和脚本,对软件系统进行测试,从而提高测试效率、减少测试周期和成本,增强测试结果的可重复性和一致性。与手动测试相比,自动化测试具有以下优势:提高测试效率:自动化测试可以快速地执行大量测试用例,而且可以在不同的测试环境中运行,从而有效提高测试......
  • JMeter02-性能测试关注点
    被测系统的组成被测系统由应用服务器和数据库服务器组成影响性能的因素硬件:CPU、内存、硬盘……操作系统:并发时缓存大小,缓存交换任务优先级网络:公共网络延迟、服务器本地网络速度、带宽、吞吐量中间件、Web服务器数据库服务器:索引设计等因素客户端:用户数和类型、活动频率......
  • JMeter03-性能测试基本概念
    性能测试类型性能测试类型包括负载测试、压力测试、强度测试、容量测试、并发测试、稳定性测试(可靠性测试、疲劳强度测试)、配置测试、失败测试等性能测试性能测试(PerformanceTesting):通过模拟生产运行的业务压力量和使用场景组合,测试系统的性能是否满足生产性能的需要。说明:......