2 回答

TA貢獻1802條經驗 獲得超6個贊
time.Sleep
只保證它至少會睡到參數(shù)一樣長的時間。它實際休眠多長時間取決于您的操作系統(tǒng)和其他因素。
在 Windows 上,它至少休眠 1.9 毫秒。在我的 MacBook 上,我得到 408 ns/op,而你看到的是 298.1 ns/op。
您可以在 Go github 存儲庫中的這張票中找到有關此問題的更多詳細信息:
https://github.com/golang/go/issues/29485

TA貢獻1850條經驗 獲得超11個贊
文章“ How to Write Accurate Benchmarks in Go ”(Teiva Harsanyi,2022 年 8 月)和基準維基頁面都提到perflock
(在 Linux 上):
我們應該確保執(zhí)行基準測試的機器是空閑的。但是,外部進程可能會在后臺運行,這可能會影響基準測試結果。
出于這個原因,諸如 之類的工具
perflock
可以限制基準測試可以消耗多少 CPU。例如,我們可以使用總可用 CPU 的 70% 運行基準測試,將 30% 分配給操作系統(tǒng)和其他進程,并減少機器活動因素對結果的影響。
另請參閱“問題 44343::runtime
比time.Sleep
預期花費更多時間”。
對于 Linux,我們應該使用
epoll_pwait2
,例如https://go.dev/cl/363417。
這個系統(tǒng)調用是較新的,但這將改進未來的事情并為特別受影響的用戶提供解決方法(升級內核)。
- 2 回答
- 0 關注
- 125 瀏覽
添加回答
舉報