基准测试(benchmark)

简介

基准测试是一种测试代码性能的方法, 同时也可以用来识别某段代码的CPU或者内存效率问题. 许多开发人员会用基准测试来测试不同的并发模式, 或者用基准测试来辅助配置工作池的数量, 以保证能最大化系统的吞吐量. 

和单元测试的文件名一样, 基准测试的文件名也必须以“_test.go”结尾. 另外, 基准测试函数必须以Benchmark开头, 接受一个指向testing.B类型的指针作为唯一参数. 

实战

题目:比较Golang标准库里3种将整数转为字符串的性能。

package benchmark_test

import (
	"fmt"
	"strconv"
	"testing"
)

func BenchmarkSprintf(b *testing.B) {
	b.ResetTimer()
	number := int64(10)
	for i := 0; i < b.N; i++ {
		fmt.Sprintf("%d", number)
	}
}

func BenchmarkItoa(b *testing.B) {
	b.ResetTimer()
	number := 10
	for i := 0; i < b.N; i++ {
		strconv.Itoa(number)
	}
}

func BenchmarkFormat(b *testing.B) {
	b.ResetTimer()
	number := int64(10)
	for i := 0; i < b.N; i++ {
		strconv.FormatInt(number, 10)
	}
}

运行结果:

从运行结果看, sprintf执行了5kw次, 平均一次要105ns; itoa执行了10亿次, 平均一次要5.64ns, formatInt执行了20亿次, 平均每次要3.73ns. 

参数介绍:

-bench=. 表示希望运行所有的基准测试函数, 也可以指定基准测试名字, 如-bench="BenchmarkFormat", 并且支持表达式;

-benchtime="3s" 表示每个基准测试函数持续3s;

-benchmem提供每次操作分配内存的次数(如2 allocs/op), 以及每次操作分配的字节数(16B/op). 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值