我必须每分钟执行一些语句。我不确定应该遵循以下哪一项。如果有人可以在内存和CPU方面说明利弊,那就太好了。
time.Sleep()
func main() {
go func() {
for {
time.Sleep(time.Minute)
fmt.Println("Hi")
}
}()
time.Sleep(10 * time.Minute) //just to keep main thread running
}
或股票代码
func main() {
go func() {
for _ = range time.Tick(time.Minute) {
fmt.Println("Hi")
}
}()
time.Sleep(10 * time.Minute) //just to keep main thread running
}
答案 0 :(得分:5)
从文档中
NewTicker返回一个新的Ticker,其中包含一个通道,该通道将发送时间,该时间由duration参数指定。它会调整间隔或滴答滴答声以弥补接收速度慢的问题。持续时间d必须大于零;如果没有,NewTicker将惊慌。停止行情自动收录器以释放关联的资源。
time.Sleep
仅等待提供的时间,然后继续执行程序。如果其余代码需要更长的时间,则无法进行调整。
代码行情器考虑了所提供块的执行时间,并在必要时跳过了一个时间间隔。
想象一下这种情况:您提供了1分钟的时间间隔,并且您的代码需要10秒才能执行。
在第一个版本中,程序将执行代码十秒钟,然后进入休眠状态60秒钟。几乎每70秒就会调用一次。
在第二个版本中,代码将执行10秒钟,然后置顶器将等待时间调整为50秒钟。您的代码每分钟都会准确执行一次。
答案 1 :(得分:0)
在上面的示例中没有区别。但是,行情收录器还使用通道,因此并发安全。例如,您可以创建几个应该每2秒执行一次工作的工作人员,而不是使用股票交易系统,那么您需要1个工作人员同时完成这项工作。