在 golang、计时器或 goroutine 循环中等待事件直到过期的最佳方法是什么?
Which is best way to wait event until expire in golang, timer or goroutine loop?
状态机的第一个状态是等待一个事件,如果某天事件没有发生,状态机将切换到第二个状态。如果事件发生在此期间,状态机将切换到第三状态。
我有两个选择:
1、使用定时器。将计时器设置为特定日期。时间到了,检查事件是否发生。如果发生,切换到第三种状态。如果不是,则切换到第二种状态。期间可能会创建上千个定时器
2、使用例程循环。启动例程 运行 一个循环。每半小时,goroutine 将检查事件是否发生。如果事件发生,切换到第三种状态。否则,一直循环直到某几天过期,然后切换到第二状态。
我的问题是 time.Timer vs goroutine,哪个更适合这种情况?
既然你提到了几天的时间段,那么在给定的两个时间段中,你应该选择第二个选项。通过这种方式,您可以将状态存储到文件(或数据库)并在必要时重新启动进程。第一个选项使存储状态更加困难,但仍然可行。
状态机的第一个状态是等待一个事件,如果某天事件没有发生,状态机将切换到第二个状态。如果事件发生在此期间,状态机将切换到第三状态。
我有两个选择: 1、使用定时器。将计时器设置为特定日期。时间到了,检查事件是否发生。如果发生,切换到第三种状态。如果不是,则切换到第二种状态。期间可能会创建上千个定时器
2、使用例程循环。启动例程 运行 一个循环。每半小时,goroutine 将检查事件是否发生。如果事件发生,切换到第三种状态。否则,一直循环直到某几天过期,然后切换到第二状态。
我的问题是 time.Timer vs goroutine,哪个更适合这种情况?
既然你提到了几天的时间段,那么在给定的两个时间段中,你应该选择第二个选项。通过这种方式,您可以将状态存储到文件(或数据库)并在必要时重新启动进程。第一个选项使存储状态更加困难,但仍然可行。