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

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

解釋一下執行時間差異

解釋一下執行時間差異

Go
紅顏莎娜 2023-07-10 15:13:57
我開始通過 Donovan-Kernighan 的《Go 編程語言》一書學習 Golang。在第一章中,作者建議測試幾種替代的簡單回顯函數實現。我使用time函數來計算執行時間,如下所示:  29 func main() {  30     var start, end int64  31     //fmt.Println("Testing echo implementation")  32     start = time.Now().UTC().UnixNano()  33     echo3()  34     end = time.Now().UTC().UnixNano()  35     fmt.Println(end - start)  36     start = time.Now().UTC().UnixNano()  37     echo3()  38     end = time.Now().UTC().UnixNano()  39     fmt.Println(end - start)  40 }如果我使用go build ...命令構建代碼,我會得到結果:?  go-hello-world ./echo2./echo281073./echo25591正如您所看到的,與第二個調用相比,第一個調用需要十倍的時間。請注意,我echo3在兩種情況下都調用相同的函數。我猜想第一次打電話需要fmt.Println很長時間。為此,我在第 31 行添加了函數調用并再次測試:?  go-hello-world ./echo2Testing echo implementation./echo26327./echo24249您可以看到這兩個調用需要相似的時間。但真理的來源在哪里呢?另一個有趣的時刻是,當我通過go run ...命令運行代碼時,我得到的時間要少得多:?  go-hello-world go run echo2.goTesting echo implementation/tmp/go-build040243191/b001/exe/echo21743/tmp/go-build040243191/b001/exe/echo21133?  go-hello-world go run echo2.go/tmp/go-build646239204/b001/exe/echo234525/tmp/go-build646239204/b001/exe/echo21133我認為當我使用構建命令創建二進制文件時,我會得到更有效的機器代碼來執行。您能解釋一下為什么它在實踐中以這種方式起作用嗎?環境:OS: ArchLinux 5.2.5-arch1-1-ARCHGo: go1.12.7 linux/amd64PS我對我的英語感到抱歉。更新#1
查看完整描述

1 回答

?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

嘗試使用第 11.4 節中所示的基準測試技術編寫一個基準測試方法,其中循環運行每個方法數百次左右。

運行之間的差異可能是由多任務操作系統和計時器分辨率等引起的各種測量誤差。

另外,我認為當你進一步了解時可以返回練習(練習需要對主題有一定的熟悉度)


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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