时间轮 时间轮算法
一、时间轮算法使用场景
时间轮算法主要用于高并发系统的时间轮调度,以及定时任务管理等场景。1.时间轮算法适用于需要按照时间顺序执行任务并具有周期性的场景,如高并发下的延迟任务调度,定时任务管理等场景。2.时间轮算法可以极大地提高系统的效率,避免了多线程同时执行任务而带来的错误和效率低下的问题,同时也能够提高系统对多种并发场景的处理效率。3.时间轮算法在实际应用中得到了广泛的应用,如Nginx中使用的定时器,以及高性能网络编程中的事件处理机制等。
二、时间轮算法
如果一个系统中存在着大量的调度任务,而大量的调度任务如果每一个都使用自己的调度器来管理任务的生命周期的话,浪费cpu的资源并且很低效。
时间轮是一种高效来利用线程资源来进行批量化调度的一种调度模型。把大批量的调度任务全部都绑定到同一个的调度器上面,使用这一个调度器来进行所有任务的管理(manager),触发(trigger)以及运行(runnable)。能够高效的管理各种延时任务,周期任务,通知任务等等。
不过,时间轮调度器的时间精度可能不是很高,对于精度要求特别高的调度任务可能不太适合。因为时间轮算法的精度取决于,时间段“指针”单元的最小粒度大小,比如时间轮的格子是一秒跳一次,那么调度精度小于一秒的任务就无法被时间轮所调度。
三、netty时间轮原理
Netty是一个基于JAVANIO类库的异步通信框架,它的架构特点是:异步非阻塞、基于事件驱动、高性能、高可靠性、高可定制性。
时间轮有以下三种状态:
WORKER_STATE_INIT:初始化状态,此时时间轮内的工作线程还没有开启。
WORKER_STATE_STARTED:运行状态,时间轮内的工作线程已经开启。
WORKER_STATE_SHUTDOWN:终止状态,时间轮停止工作。