我正在對我在 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 關注
- 308 瀏覽
添加回答
舉報
0/150
提交
取消