基准测试(benchmark)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/woniu317/article/details/82560312

简介

基准测试是一种测试代码性能的方法, 同时也可以用来识别某段代码的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). 

猜你喜欢

转载自blog.csdn.net/woniu317/article/details/82560312
今日推荐