加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang time.Sleep bug?

发布时间:2020-12-16 19:02:59 所属栏目:大数据 来源:网络整理
导读:我在下面制作测试代码(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 gote
我在下面制作测试代码(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)
    }
}

安慰

go run gotest.go

并且,更改我的计算机的日期
(例如:2015-07-30 – > 2015-07-29)

然后,
println没有打印!!

是bug吗?

(它正在努力设定第二天)

我使用MacOs最新版本.
谢谢.

内部睡眠是在绝对时间内完成的:如果你在时间T调用睡眠(n),程序被安排在n次之后不被唤醒,而是在时间T n.

这通常是优选的,因为:

>时间通常不会倒退
>由于OS调度延迟,反复睡眠的程序可能无限期地落后于计划;使用绝对时间使其通过较短的间隔睡眠来补偿延迟.

在您的情况下,您只需等待一天程序再次开始打印. :d

或者在过去设置一点时间(例如15秒),并看到程序在15秒后恢复.

PS.澄清一个例子会发生什么:

在2016-08-25 16:27:12程序调用time.Sleep(2 * time.Second)
Go运行时安排在2016-08-25 16:27:14唤醒goroutine并将goroutine置于睡眠状态

同时……

用户将系统时间设置为2016-08-24 16:27:13

现在超时计划在一天后过期一秒钟.

这不应该发生在Go使用POSIX CLOCK_MONOTONIC或其等价物的系统上.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读