延时任务-基于netty时间轮算法实现

本文介绍了Netty时间轮算法实现延时任务,包括时间轮算法的基本原理、Hello-World示例、异步任务线程池的使用以及时间轮的优缺点。强调了在时间轮中执行的任务必须是异步的,以避免影响其他任务执行,并提供了一个基于Spring Boot的线程池示例。同时,讨论了时间轮在服务故障时的任务数据丢失问题,指出可以借助分布式中间件来解决。
摘要由CSDN通过智能技术生成

一、时间轮算法简介

为了大家能够理解下文中的代码,我们先来简单了解一下netty时间轮算法的核心原理

时间轮算法名副其实,时间轮就是一个环形的数据结构,类似于表盘,将时间轮分成多个bucket(比如:0-8)。假设每个时间轮轮片的分隔时间段tickDuration=1s(即:指针经过每个格子花费时间是 1 s),当前的时间bucket=3,那么在18秒后需要被执行的任务需要落到((3+18)%8=5取余运算)的5号bucket上。假如有多个需要在该时间段内执行的任务,就会组成一个双向链表。另外针对时间轮我们要有下面的几个认知:

  • 时间轮指针是一个Worker线程,在时间轮整点的时候执行双向链表中的任务。

  • 时间轮算法的并不是精准的延时,它的执行精度取决于每个时间轮轮片的分隔时间段tickDuration

  • Worker线程是单线程,一个bucket、一个bucket的顺序处理任务。「所以我们的延时任务一定要做成异步任务,否则会影响时间轮后续任务的执行时间。」

二、时间轮hello-world

实现一个延时任务的例子,需求仍然十分的简单

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值