| 问题 | 关键词/关键概念 | | | | :---------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------- | :-- | :-- | | [[为什么定时任务可以定时执行?]] | **系统时钟**:CPU时钟中断<br>**定时器机制**:内核定时器<br>**线程调度**:sleep/wait机制<br>**轮询检查**:定期扫描任务队列<br><br>[[硬件层]] | | | | [[什么是时间轮?]] | **环形数组**:固定槽位存储任务<br>**指针转动**:每个tick移动一格<br>**多层时间轮**:不同精度层级<br>**应用**:Netty、Kafka延迟队列 | | | | [[实现定时任务的数据结构及算法?]] | **优先队列**:最小堆、O(logN)<br>**时间轮**:哈希环、O(1)<br>**红黑树**:TreeMap、O(logN)<br>**延迟队列**:DelayQueue<br>**跳表**:Redis zset | | | | [[Java中Timer实现原理?]] | **TaskQueue**:最小堆优先队列<br>**TimerThread**:单线程轮询<br>**wait/notify**:等待最近任务时间<br>**缺陷**:单线程阻塞、异常影响其他任务 | | | | [[Java实现定时任务方式?]] | **Timer/TimerTask**:简单但单线程<br>**ScheduledExecutorService**:线程池、推荐<br>**Spring @Scheduled**:注解方式<br>**Quartz**:功能强大、支持集群<br>**XXL-JOB**:分布式任务调度 | | | | [[xxl-job支持分片任务吗?原理?]] | **支持分片**:将大任务拆分多个执行器并行<br>**原理**:总片数=执行器数量、当前片=(0到n-1)、业务按分片取模处理数据<br>**路由策略**:分片广播SHARDING_BROADCAST | | | | [[xxl-job如何保证任务只触发一次?]] | **调度中心统一调度**:单点触发<br>**分布式锁**:数据库锁保证唯一<br>**任务状态控制**:运行中不重复触发<br>**路由策略**:选择唯一执行器 | | | | [[定时任务扫表方案缺点?]] | **性能差**:全表扫描开销大<br>**延迟高**:扫描间隔决定精度<br>**资源浪费**:空转CPU<br>**数据库压力**:频繁查询<br>**扩展性差**:单机瓶颈 | | | # [[定时任务]]