我正在对我在 Go 中创建的软件库进行基准测试,我遇到了运行时和 ns/op 之间的不协调。我是基准测试的新手,Go 的文档和过去的 stackoverflow 问题在概念上没有深入地涵盖基准测试,所以我正在寻找比我有更多概念知识的人来帮助我(和其他处于类似困境中的 stackoverflow 用户)理解到底发生了什么。
使用本机 Go 执行的任务的基准输出:
1000000000 0.6136 ns/op 0 B/op 0 allocs/op
PASS
ok github.com/gabetucker2/gostack/benchmark 0.862s
使用我的软件库执行相同任务的基准测试输出:
1576087 805.3 ns/op 544 B/op 21 allocs/op
PASS
ok github.com/gabetucker2/gostack/benchmark 2.225s
注意两点:
我的软件库的 ns/op 比原生 Go 的 ns/op 慢 1200 倍左右
我的软件库的运行时间比原生 Go 的运行时间慢 2 倍左右
对我来说,我的软件库中的一个非常简单的函数应该比本地 Go 代码慢 1200 倍似乎是不可能的,而且它只慢 2 倍似乎更合理......那么这里到底发生了什么?
为了以防万一它有用,这里是被调用的基准函数:
func test_Native_CreateArray() {
myArr := []int {1, 2, 3}
gogenerics.RemoveUnusedError(myArr)
}
func test_Gostack_CreateArray() {
myStack := MakeStack([]int {1, 2, 3})
gogenerics.RemoveUnusedError(myStack)
}
// native Go
func Benchmark_Native_CreateArray(b *testing.B) {
for i := 0; i < b.N; i++ {
test_Native_CreateArray()
}
}
// my software library "gostack"
func Benchmark_Gostack_CreateArray(b *testing.B) {
for i := 0; i < b.N; i++ {
test_Gostack_CreateArray()
}
}
任何清晰度将不胜感激。
月关宝盒
相关分类