我在下面制作测试代码(gotest.go)
package main
import (
"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)
}
}
Run Code Online (Sandbox Code Playgroud)
安慰
go run gotest.go
Run Code Online (Sandbox Code Playgroud)
并且,更改我的电脑的日期(例如:2015-07-30 - > 2015-07-29)
然后,println没有打印!!
是bug吗?
(它正在努力设定第二天)
我使用MacOs最新版本.谢谢.
chi*_*ill 10
内部睡眠是在绝对时间内完成的:如果您Sleep(n)按时调用T该程序,则不会在 n一段时间后唤醒,而是在时间T + n.
这通常是优选的,因为:
时间通常不会倒退
由于OS调度延迟,重复睡眠的程序可能无限期地落后于计划; 使用绝对时间使其通过较短的间隔睡眠来补偿延迟.
在您的情况下,您只需等待一天程序再次开始打印.:d
或者在过去设置一点时间(例如15秒),并看到程序在15 + 2秒后恢复.
PS.澄清一个例子会发生什么:
在2016-08-25 16:27:12程序调用time.Sleep(2 * time.Second)
The Go运行时安排在2016-08-25 16:27:14 唤醒goroutine并让goroutine进入睡眠状态
同时......
用户设置系统时间2016-08- 24十六点27分13秒
现在超时计划在一天后过期一秒钟.
这不应该发生在Go使用POSIX CLOCK_MONOTONIC或其等价物的系统上.
| 归档时间: |
|
| 查看次数: |
13916 次 |
| 最近记录: |