亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go 基準測試:ns/op 和運行時之間的不協調

Go 基準測試:ns/op 和運行時之間的不協調

Go
蝴蝶刀刀 2023-03-07 14:24:57
我正在對我在 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 秒 + 開銷結束。


查看完整回答
反對 回復 2023-03-07
  • 1 回答
  • 0 關注
  • 308 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號