【问题标题】:Fire a tick once a day in go (golang) - Not by polling [closed]在go(golang)中每天触发一次滴答声 - 不是通过轮询[关闭]
【发布时间】:2020-04-01 20:24:23
【问题描述】:

我正在使用 go 1.14

我想每天触发一次滴答声,但据我从源代码了解,Timer 函数是轮询的,而不是等待一些信号。

这是真的吗?如果是这样,每天触发一次事件的最佳方式是什么?投票方式在我看来很过分。

【问题讨论】:

  • 关注godoc.org/time#example-Tick,持续时间为24 * time.Hour。该循环将每天执行一次。
  • 当然可以,但我想知道它是否太贵了,因为我认为该功能是轮询,也许还有其他选择。
  • 频道接收不轮询。
  • 他们没有,但是将数据发送到通道的功能是轮询(据我所知)。
  • 为什么您认为运行时计时器是轮询且每天运行一次的成本很高?

标签: performance go time


【解决方案1】:

time.NewTicker(...) 的 go 源似乎使用了未通过轮询实现的通道,因此您应该能够简单地执行以下操作:

t := time.NewTicker(24 * time.Hour)
for _ = range t.C {
    // ...
}

你也可以使用time.Sleep(...):

for {
  // ...
  time.Sleep(24 * time.Hour)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多