[英]Go: Unexpected Results from time.Sleep
運行此代碼(作為構建的可執行文件,而不是使用調試器):
package main
import (
"fmt"
"time"
)
func main() {
startTime := time.Now()
for i := 0; i < 1000; i++ {
time.Sleep(1 * time.Millisecond)
}
fmt.Printf("%d\n", time.Since(startTime).Milliseconds())
}
我得到 output:
15467
這似乎是調用time.Sleep()
function; 的主要開銷。 它實際上每次循環迭代需要 15 毫秒,即使它在每個循環中只休眠 1 毫秒。 這表明運行循環迭代和啟動睡眠有 14 毫秒的開銷。
如果我們調整睡眠時長:
package main
import (
"fmt"
"time"
)
func main() {
startTime := time.Now()
for i := 0; i < 1000; i++ {
time.Sleep(10 * time.Millisecond)
}
fmt.Printf("%d\n", time.Since(startTime).Milliseconds())
}
我得到 output:
15611
這基本上是相同的持續時間,即使它應該休眠 10 倍的時間。 這消除了循環迭代和啟動睡眠有 14 毫秒開銷的想法,因為如果是這種情況,那么總共將是 (14+10)*1000 = 24000 毫秒,但事實並非如此。
我錯過了什么? 為什么這段代碼的執行時間相同,不管睡眠時間是 1 毫秒還是 10 毫秒?
請注意,我已經嘗試在 Go 操場上運行它,但得到不同的結果; 我認為它處理睡眠的方式不同。 這些結果在我運行 i7-10510 的筆記本電腦上是一致的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.