我正在对我在 Go 中创建的软件库进行基准测试,我遇到了运行时和 ns/op 之间的不协调。我是基准测试的新手,Go 的文档和过去的 stackoverflow 问题在概念上没有深入地涵盖基准测试,所以我正在寻找比我有更多概念知识的人来帮助我(和其他处于类似困境中的 stackoverflow 用户)理解到底发生了什么。使用本机 Go 执行的任务的基准输出:1000000000 0.6136 ns/op 0 B/op 0 allocs/opPASSok github.com/gabetucker2/gostack/benchmark 0.862s使用我的软件库执行相同任务的基准测试输出:1576087 805.3 ns/op 544 B/op 21 allocs/opPASSok 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 Gofunc 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() }}任何清晰度将不胜感激。
1 回答

月关宝盒
TA贡献1772条经验 获得超5个赞
第一个函数以 0.61ns/op 运行了 1_000_000_000 次,这是总运行时间的 0.61 秒,总运行时间为 0.862 秒。
第二个函数以 805ns/op 运行了 1_576_087 次,这大约需要 2.225 秒中的 1.26875 秒。强制第二个函数运行 1_000_000_000 次应该以大约 805 秒 + 开销结束。
- 1 回答
- 0 关注
- 319 浏览
添加回答
举报
0/150
提交
取消