前言
在上一篇 xxl-job 执行器原理分析 一文中,我们提到了 xxl-job 框架中包含了两个核心模块:调度中心 和 执行器, 其中调度中心主要负责 任务的调度 , 而执行器负责 任务的执行, 两者各司其职。 紧接着我们通过画图的方式对 执行器 的内部构造进行了分析,并且还对 Job 的执行流程进行了梳理。
本文我们继续围绕任务的调度流程对 调度中心 进行剖析, 内容依然参照 xx-job v2.x 版本的源码。
正文
再看一遍 xxl-job 架构图:
调度中心主要提供了两个功能: 系统管理 和 任务调度。其余的都是一些辅助功能。
- 系统管理正如图中所示的那样, 包括任务管理、执行器管理、日志管理。还提供了管理界面。
- 任务调度就是负责从数据中心拉取任务,并按照执行时间将任务投递给执行器。
调度器的组成结构
两个核心线程
当调度中心启动后,会启动以下两个线程:
- schedulerThread
scheudlerThread
主要做如下两件事情:
- 从数据中心(db),也就是
xxl_job_info
表中扫描出符合 条件 1 的任务, 条件1 限制如下:- 任务执行时间 小于(当前时间 + 5 s)
- 限制扫描个数, 这个值是动态的,会根据后面的提到的 快慢线程池 中线程数量有关系。
count = treadpool-size * trigger-qps (each trigger cost 50ms, qps = 1000/50 = 20) treadpool-size = (getTriggerPoolFastMax()</