问答

多个定时任务,执行间隔时间不一样,如何处理执行逻辑更合适?

作者:admin 2021-04-20 我要评论

假设现在有100个任务, n 分钟执行一次, 每个任务的 n 不一样 现在想到的逻辑是: 1.启动死循环线程遍历任务 2.如果上次执行时间距离当前时间 n 则执行 但是这...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

假设现在有100个任务,n 分钟执行一次, 每个任务的 n 不一样

现在想到的逻辑是:

1.启动死循环线程遍历任务
2.如果上次执行时间距离当前时间 >n 则执行

但是这种逻辑有些问题,比如:

若前面的任务执行时间特别长。大于后面任务的n, 那么这个间隔时间将 不精确

请问这种场景如何处理逻辑更合适呢? 目前用的 nodejs

###

我用PHP写过一个crontab例子玩过。

php-cli分为两部分。一部分为观察者,另一部分为消费者:

  • 观察者是观察是否有满足条件的任务,如果有满足条件的任务就会生成一个任务ID,然后将任务与任务ID一同push到redis消息队列。
  • 消费者轮询队列,发现队列中有任务存在就将其取出执行,待执行完毕通过任务ID通知观察者该任务重新开始计时。

在您的问题中:
问:前面的任务执行时间特别长。大于后面任务的n
答:观察者不负责执行,只负责观察是否存在满足条件的任务。然后将其通过队列移交到消费者端。就不存在前面的任务执行时间长导致后面的任务无法执行。(消费者不止一个进程。可以看实际情况开启多个)

###
  1. 開單獨綫程執行;
  2. 使用時間戳計算時間間隔。
###

如果你的单一任务执行时间比较长,且希望保证不阻塞其他任务的按时进行,那么请选择多线程;
相反,如果你的单任务执行时间比较短又或者大多数时间都在等待状态,那么可以使用单行程遍历,但需要自行实现任务等待跳出与场景保持。

###

node-cron

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • nginx响应速度很慢

    nginx响应速度很慢

  • 点击选中的多选框,会在已选那一栏显示

    点击选中的多选框,会在已选那一栏显示

  • PHP 多态的理解

    PHP 多态的理解

  • 关于C语言中static的问题

    关于C语言中static的问题

腾讯云代理商
海外云服务器