Tbschedule源码阅读5:TbSchedule任务的执行

本文详细介绍了TbSchedule任务在被manager或Timer恢复/暂停后执行的流程,包括启动执行线程、数据加载、任务处理和调度控制等关键步骤。在任务执行过程中,涉及对数据队列的管理、任务状态的检查以及对分布式调度系统的思考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

终于到了任务执行阶段,当manager(或者在任务恢复/暂停Timer里)调用resume后,会启动执行线程执行任务。根据配置的参数,启动1个或者多个线程去执行线程。具体的流程如下:

  • 1.若调度被停止,那么将当前线程移除,若是最后一个线程,还需要注销调度服务(也就是将manager中的processor设置为null),然后直接返回,否则:
  • 2.加载需要处理的数据。(从共享数据队列中取出第一个,若数据没有在可能重复的队列中,则返回该数据)
  • 3.若加载的数据为空,需要重新加载数据,否则执行步骤4
    • 3.1 判断是否已经加载过或者任务被停止,则返回否则如下:
    • 3.2 拷贝当前正在执行的数据(将当前正在执行的数据队列copy一份)用于第2步判断是否可能重复执行;
    • 3.3 获取当前调度的应该处理的Item
      • 3.3.1 判断是否需要重新加载item,若否的话到第,是的话到:
      • 3.3.2 若当前processor不为null, 则等待之前加载的数据已经处理完成;
      • 3.3.3 重新加载数据;
      • 3.3.4 重置需要重新加载Item标志为falas;
      • 3.3.5 返回当前currentTaskItemList
    • 3.4 若当前taskItem不为空,则执行selectTask, 将任务的参数,分片信息(taskItems)传入到客户端,获取需要处理的数据;
    • 3.5 当没有数据的时候,判断是否需要退出调度;
      • 3.5.1 当前任务分片不为空且允许开始时间不为空且允许结束时间为空则暂停调度,返回true, 否则返回false;
      • 3.5.2 若不需要停止调度,则休眠一定时间;
    • 3.6 返回加载的数据队列,返回步骤1
  • 4.执行execute方法,客户端控制的,完鸟。
    该部分流程图如下:

任务执行流行图

下一节将讲述对分布式调度系统的思考另外,文章最开始写作于有道笔记,为一边读代码一边写入,部分内容可能没有及时同步。可移步至TbSchedule任务的执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值