首页 > 其他分享 >golang 随机数组的性能对比测试

golang 随机数组的性能对比测试

时间:2024-03-15 11:34:06浏览次数:25  
标签:rand func 随机数 nums ++ bench golang 测试 op

最近需要用到随机数,但在随机数的生成方面遇到些问题,如加了 seed 后反而生成的数组是固定的,没有加是随机的,后面查资料了解到,如果 seed 值是一样的,序列中的值就固定的,而不加 seed 时,每次的都是随机的,后面想到如果用来做负载均衡呢,性能又如何。

下面是源码:

package bench

import (
	"math/rand"
	"time"
)

// 性能次之, us level
func randWithSeed()  {
	rand.Seed(time.Now().UnixNano())
	nums := []int{}
	for i := 0; i < 10; i++ {
		nums = append(nums, rand.Intn(100))
	}
}

// 性能最好,ns level
func randWithoutSeed()  {
	nums := []int{}
	for i := 0; i < 10; i++ {
		nums = append(nums, rand.Intn(100))
	}
}

// 性能最差, ms level
func randByTimestampMod()  {
	nums := []int64{}
	for i := 0; i < 10; i++ {
		num := time.Now().UnixMicro()
		nums = append(nums, num % 10)
		time.Sleep(time.Microsecond)
	}
}

性能测试源码:

package bench

import "testing"

func BenchmarkRandByTimeSeed(b *testing.B) {
	for i := 0; i < b.N; i++ {
		randWithSeed()
	}
}

func BenchmarkRandWithOutSeed(b *testing.B) {
	for i := 0; i < b.N; i++ {
		randWithoutSeed()
	}
}

func BenchmarkRandByTimestamp(b *testing.B) {
	for i := 0; i < b.N; i++ {
		randByTimestampMod()
	}
}

测试结果:

$ go test -bench=. -benchtime=5s -benchmem
goos: windows
goarch: amd64
pkg: go-antsDemo/bench
cpu: AMD Ryzen 7 4700U with Radeon Graphics
BenchmarkRandByTimeSeed-8         709338              8415 ns/op             248 B/op          5 allocs/op
BenchmarkRandWithOutSeed-8      19385298               305.7 ns/op           248 B/op          5 allocs/op
BenchmarkRandByTimestamp-8            44         150723675 ns/op             250 B/op          5 allocs/op
PASS
ok      go-antsDemo/bench       19.103s

可以看到 直接调用 rand.Intn性能是最好的,其次是调用 Seed 下再调用 rand.Intn,最差的就是通过时间戳了,性能一次在 纳秒、微妙和毫秒之间,差别还是挺大的,仅供参考。

标签:rand,func,随机数,nums,++,bench,golang,测试,op
From: https://www.cnblogs.com/davis12/p/18075066

相关文章

  • Invicti v24.3.0 for Windows - Web 应用程序安全测试
    Invictiv24.3.0forWindows-Web应用程序安全测试InvictiStandard12Mar2024v24.3.0请访问原文链接:https://sysin.org/blog/invicti/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgInvicti是一种自动化但完全可配置的Web应用程序安全扫描程序,使您能够扫......
  • python post测试
    pythonpost测试 importrequests#设置请求的URLurl='http://example.com/api/post'#准备要发送的数据,这里假设有一个中文字段'name'data={'name':'张三',#中文名字'age':30}#发送POST请求,指定headers中的Content-Type为applica......
  • 软件测试|使用Python绘制雷达图
    前言之前用matplotlib绘制了雷达图,可能代码量会相对多一些,今天我想起了我们之前介绍过的pyecharts,这个绘图神器,也是支持绘制雷达图的,今天我们来看看实现起来会不会更简单。我们还是以买车的朋友选择来作为我们的数据进行绘制。 绘制基础雷达图pyecharts支持绘制的图形中就包......
  • 利用jmeter命令行模式对influxdb查询api进行压力测试
    需求说明物联网指标数据(车辆的轨迹、里程、速度等)存储在influxDB中。需要对指标查询服务的性能做压力测试。背景1、javaservice已经对influxDB查询sql做了封装,api参数如下:{"deviceIds":["14146284645"],"startTime":1710259200000,"endTime":17104320......
  • 4大软件测试策略的特点和区别(单元测试、集成测试、确认测试和系统测试)
    四大软件测试策略分别是单元测试、集成测试、确认测试和系统测试。一、单元测试单元测试也称为模块测试,它针对软件中的最小单元(如函数、方法、类、模块等)进行测试,以验证其是否符合预期的行为和结果。单元测试通常由开发人员编写,目的是在开发过程中尽早发现和修复错误,从而提高软......
  • 迅为iTOP-RK3588开发板Buildroot系统功能测试
     第三章Buildroot系统功能测试烧写buildroot系统镜像,buildroot系统镜像在网盘资料“iTOP-3588开发板\01_【iTOP-RK3588开发板】基础资料\06_iTOP-RK3588开发板Linux镜像\01_Buildroot镜像”目录下,本小节测试buildroot系统。 3.1系统启动Buildroot系统启动后,串口如下图所示......
  • 【AIGC调研系列】Github Copilot进行pytest自动化测试的实践经验
    GitHubCopilot可以用于pytest自动化测试的实践和使用方法。此外,Copilot可以在很多情况下仅通过注释或函数名就能实例化出完整的代码,这表明它也可以用于补充测试用例[5]。具体到pytest框架,它是一个非常容易上手的自动化测试框架,具有丰富的资料文档和第三方插件,可以自定义扩展......
  • PostgreSQL从入门到精通教程 - 第46讲:poc-tpch测试
       PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUGPG技术大讲堂。 第46讲:POC-TPCH测试  内容1:TPC-H介绍内容2:TPC-H......
  • 精通Spring Boot单元测试:构建健壮的Java应用
    引言:在当今软件开发领域,单元测试已经成为确保应用质量和可维护性的关键步骤。特别是在Java生态系统中,SpringBoot框架作为一种广泛应用的解决方案,其对于单元测试的支持更是让开发者受益匪浅。本博客的目标是为开发者提供一份清晰易懂的指南,帮助他们利用SpringBoot框架构建......
  • 06 games101-光栅化(深度测试与抗锯齿)
    06光栅化(深度测试与抗锯齿)从采样分析走样采样的对象:●在位置上采样——照片●在时间上采样——视频以下副标题均是在时域上分析。采样的瑕疵(Artifacts)Artifacts(Erros/Mistakes/Inaccuracies)●锯齿●摩尔纹●车轮效应●…走样的原因信号频率太快,采样太......