我正在對我在 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()
}
}
任何清晰度將不勝感激。
uj5u.com熱心網友回復:
第一個函式以 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 秒 開銷結束。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/522259.html
標籤:去基准测试
上一篇:使用帶有Gorm的原始查詢從psql檢索sum()結果
下一篇:結構的指標地址