介绍
go或golang是一种强大的语言,它提供了几个功能,以简化并发和网络程序的开发。这些功能之一是能够安排任务以特定时间或间隔运行。此功能由Golang中的两种计时器提供:time.Timer
和time.Ticker
。
这两个都对调度任务有用,但是它们具有不同的用例和行为。在本文中,我们将探讨两者之间的差异以及何时选择哪一个。
golang小时
time.Timer
类型代表一个单一事件,将来只会发生一次。创建计时器时,它不会自动启动。相反,它等待指定的持续时间,然后发射一次。计时器启动后,它将无法再次使用。
让我们看一个示例,说明如何在2秒延迟后创建一个计时器:
package main
import (
"fmt"
"time"
)
func main() {
timer := time.NewTimer(2 * time.Second)
<-timer.C
fmt.Println("Timer fired!")
}
游乐场网址:https://go.dev/play/p/FFC-f9IdygK
在此示例中,我们使用time.newtimer函数创建一个新的计时器,并将其传递2秒钟。然后,我们通过使用< - 运算符从其C通道读取其C频道来等待计时器。计时器发射后,我们将向控制台打印一条消息。
重要的是要注意,如果我们试图在计时器发射后重置计时器,我们会感到恐慌:
timer.Reset(time.Second) // panic: Reset called on a Timer that has already fired or been stopped
Golang Ticker
time.Ticker
类型代表以固定间隔触发的重复事件。创建股票时,它会自动启动,并以指定的间隔发射直到停止。与时间。
让我们查看一个如何创建每500毫秒射击的股票的示例:
package main
import (
"fmt"
"time"
)
func main() {
ticker := time.NewTicker(500 * time.Millisecond)
go func() {
for t := range ticker.C {
fmt.Println("Tick at", t)
}
}()
time.Sleep(2000 * time.Millisecond)
ticker.Stop()
fmt.Println("Ticker stopped")
}
游乐场网址:https://go.dev/play/p/b9GoglOKTHj
在此示例中,我们使用Time.newticker函数创建一个新的股票,并将其间隔为500毫秒。然后,我们创建了一个goroutine,该goroutine循环在股票的C频道上循环,每次发射股票时都会打印当前时间。我们在调用停止方法之前停止了股票的射击。
重要的是要注意,如果我们尝试重置停止的股票,我们会感到恐慌:
ticker.Stop()
ticker.Reset(1000 * time.Millisecond) // panic: Reset called on a stopped Ticker
用例
那么,我们什么时候应该使用计时器而不是股票机?这里有几个例子:
计时器
- 当您需要在特定持续时间经过后一次执行任务时,计时器很有用。
- 当您想确保将来在特定时间执行任务时,计时器也很有用。
股票
- 当您需要以固定的间隔重复执行任务时,股票机很有用。
- 当您想定期检查某物状态(例如连接到服务器的连接)时,股票也很有用。
- 当您想以特定间隔更新缓存时,股票也很有用。
结论
总而言之,Time.Timer和Time.Golang中的Ticker类型为调度任务提供了强大的功能。计时器仅在一次活动中射击一次,而Tresker是为了连续开火。