我正在對我在 Go 中創(chuàng)建的軟件庫進(jìn)行基準(zhǔn)測試,我遇到了運(yùn)行時和 ns/op 之間的不協(xié)調(diào)。我是基準(zhǔn)測試的新手,Go 的文檔和過去的 stackoverflow 問題在概念上沒有深入地涵蓋基準(zhǔn)測試,所以我正在尋找比我有更多概念知識的人來幫助我(和其他處于類似困境中的 stackoverflow 用戶)理解到底發(fā)生了什么。使用本機(jī) Go 執(zhí)行的任務(wù)的基準(zhǔn)輸出:1000000000 0.6136 ns/op 0 B/op 0 allocs/opPASSok github.com/gabetucker2/gostack/benchmark 0.862s使用我的軟件庫執(zhí)行相同任務(wù)的基準(zhǔn)測試輸出:1576087 805.3 ns/op 544 B/op 21 allocs/opPASSok github.com/gabetucker2/gostack/benchmark 2.225s注意兩點(diǎn):我的軟件庫的 ns/op 比原生 Go 的 ns/op 慢 1200 倍左右我的軟件庫的運(yùn)行時間比原生 Go 的運(yùn)行時間慢 2 倍左右對我來說,我的軟件庫中的一個非常簡單的函數(shù)應(yīng)該比本地 Go 代碼慢 1200 倍似乎是不可能的,而且它只慢 2 倍似乎更合理......那么這里到底發(fā)生了什么?為了以防萬一它有用,這里是被調(diào)用的基準(zhǔn)函數(shù):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 回答

月關(guān)寶盒
TA貢獻(xiàn)1772條經(jīng)驗 獲得超5個贊
第一個函數(shù)以 0.61ns/op 運(yùn)行了 1_000_000_000 次,這是總運(yùn)行時間的 0.61 秒,總運(yùn)行時間為 0.862 秒。
第二個函數(shù)以 805ns/op 運(yùn)行了 1_576_087 次,這大約需要 2.225 秒中的 1.26875 秒。強(qiáng)制第二個函數(shù)運(yùn)行 1_000_000_000 次應(yīng)該以大約 805 秒 + 開銷結(jié)束。
- 1 回答
- 0 關(guān)注
- 315 瀏覽
添加回答
舉報
0/150
提交
取消