假设我想每小时运行一次任务,但在一小时内的可变时间运行。它不一定是真正随机的。例如,我只是不想在每小时的最开始做这件事。我只想每小时做一次。
这消除了几种明显的方法,例如随机睡 30 到 90 分钟,然后再睡。该任务有可能(而且很可能)连续运行多次,睡眠时间不超过 30 分钟。
我正在考虑的方法是这样的:每小时对一小时的 Unix 时间戳进行哈希处理,然后将结果修改为 3600。将结果添加到一小时的 Unix 时间戳,这就是任务应该运行的时刻。在伪代码中:
while now = clock.tick; do
// now = a unix timestamp
hour = now - now % 3600;
hash = md5sum(hour);
the_time = hour + hash % 3600;
if now == the_time; then
do_the_work();
end
end
我确信这会满足我的要求,但我认为把这个问题抛出去看看其他人有什么想法会很有趣!