假设现在有100个任务,n
分钟执行一次, 每个任务的 n
不一样
现在想到的逻辑是:
1.启动死循环线程遍历任务
2.如果上次执行时间距离当前时间 >n
则执行
但是这种逻辑有些问题,比如:
若前面的任务执行时间特别长。大于后面任务的n
, 那么这个间隔时间将 不精确
请问这种场景如何处理逻辑更合适呢? 目前用的 nodejs
假设现在有100个任务,n
分钟执行一次, 每个任务的 n
不一样
现在想到的逻辑是:
1.启动死循环线程遍历任务
2.如果上次执行时间距离当前时间 >n
则执行
但是这种逻辑有些问题,比如:
若前面的任务执行时间特别长。大于后面任务的n
, 那么这个间隔时间将 不精确
请问这种场景如何处理逻辑更合适呢? 目前用的 nodejs
如果你的单一任务执行时间比较长,且希望保证不阻塞其他任务的按时进行,那么请选择多线程;
相反,如果你的单任务执行时间比较短又或者大多数时间都在等待状态,那么可以使用单行程遍历,但需要自行实现任务等待跳出与场景保持。
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
4 回答2.4k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
我用PHP写过一个crontab例子玩过。
php-cli分为两部分。一部分为观察者,另一部分为消费者:
在您的问题中:
问:前面的任务执行时间特别长。大于后面任务的
n
答:观察者不负责执行,只负责观察是否存在满足条件的任务。然后将其通过队列移交到消费者端。就不存在前面的任务执行时间长导致后面的任务无法执行。(消费者不止一个进程。可以看实际情况开启多个)