Advertisement

C/C++后端开发学习

阅读量:

文章结构概述

  • 定时任务的处理机制
    • 实现途径

      • 1)红黑树
      • 2)最小堆
      • 3)时间轮
      • 技术选型
    • 时间轮的构建方式

      • 单层结构时间轮
      • 多层结构时间轮
        • Skynet的时间轮实现方案

定时任务的处理方式

服务端的驱动逻辑主要涵盖两种事件类型的处理,即网络I/O事件与定时事件,不同框架在整合这两种事件处理流程时采用了各异的策略:

  • 在单一线程中依次处理网络I/O事件与定时事件,例如nginx和redis。这类方案通过epoll_wait机制监控I/O状态,并借助timeout参数实现定时功能,但其不足之处在于I/O操作可能引发较为明显的延迟问题。
  • 将网络事件与I/O事件分配至不同线程进行处理,如skynet框架。该方式通过独立线程负责检测并更新定时器,并将触发的定时事件传递至消息队列中进行后续处理。

实现方案

在设计定时器时,首要任务是挑选适合的数据结构,此类结构需符合两个核心条件:

  • 构成元素需按照一定顺序排列(即将临近触发的任务置于前列)
  • 能够高效检索出键值最小的节点

较为适用的结构类型涵盖红黑树、最小堆以及时间轮等方案。

1)红黑树

对数据结构进行插入、删除或修改操

全部评论 (0)

还没有任何评论哟~