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

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

golang time.Sleep bug?

golang time.Sleep bug?

Go
胡說叔叔 2021-10-25 18:29:38
我在下面制作測試代碼(gotest.go)package mainimport (    "fmt"    "time"    "sync")        func main() {    var wg sync.WaitGroup    wg.Add(1)    go testa()        wg.Wait()}func testa() {    for {        fmt.Println("test goroutine")        time.Sleep(2 * time.Second)    }}安慰go run gotest.go并且,更改我計算機的日期(例如:2015-07-30 -> 2015-07-29)然后, println 不打?。?!是bug嗎??(正在設置第二天)我使用 MacOs 最新版本。謝謝你。
查看完整描述

2 回答

?
開心每一天1111

TA貢獻1836條經驗 獲得超13個贊

內部睡眠是用絕對時間完成的:如果你Sleep(n)在 time調用,T程序被安排不會 ntime之后醒來,而是time T + n

這通常是可取的,因為:

  • 時間通常不會倒流

  • 由于操作系統調度延遲,反復休眠的程序可能會無限期地落后于計劃;使用絕對時間可以通過縮短睡眠間隔來補償延遲。

在您的情況下,您只需要等待一天讓程序再次開始打印。:D

或者設置一個稍微過去的時間(比如 15 秒),然后看到程序在 15+2 秒后恢復。

附注。舉例說明會發生什么:

在 2016-08-25 16:27:12 程序調用time.Sleep(2 * time.Second) Go 運行時調度 goroutine 在 2016-08-25 的 16:27:14 被喚醒并讓 goroutine 進入睡眠狀態

同時 ...

用戶設置系統時間2016-08- 24 16點27分13秒

現在超時計劃在一天零一秒后到期。

這不應該發生在 Go 使用 POSIX CLOCK_MONOTONIC 或等效的系統上。


查看完整回答
反對 回復 2021-10-25
?
墨色風雨

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

time.Sleep(20_000_000_000) n 是納秒


查看完整回答
反對 回復 2021-10-25
  • 2 回答
  • 0 關注
  • 166 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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