美文网首页
环形队列-高效定时触发

环形队列-高效定时触发

作者: 西三旗靓仔 | 来源:发表于2020-01-15 21:53 被阅读0次
image image image image image image image image

为了实现高效延时触发,我们需要实现两个重要的数据结构:

(1)环形队列,例如可以创建一个包含3600个slot的环形队列(本质是个数组)

(2)任务集合,环上每一个slot是一个Set<Task>

同时,启动一个timer,这个timer每隔1s,Current Index指针移动至下一个位置,这个Current Index指针用来标识正在检测的slot。

Task结构中有两个很重要的属性:

(1)Cycle-Num:当Current Index第几圈扫描到这个Slot时,执行任务

(2)TriggerTaskFunction:需要执行的任务指针

image

假设当前Current Index指向第一格,当有延时任务到达之后,例如希望3610秒之后,触发一个延时任务,只需:

(1)计算这个Task应该放在哪一个slot,现在指向1,3610秒之后,应该是第11格,所以这个Task应该放在第11个slot的Set<Task>中

(2)计算这个Task的Cycle-Num,由于环形队列是3600格(每秒移动一格,正好1小时),这个任务是3610秒后执行,所以应该绕3610/3600=1圈之后再执行,于是Cycle-Num=1

Current Index不停的移动,每秒移动到一个新slot,这个slot中对应的Set<Task>,每个Task看Cycle-Num是不是0:

(1)如果不是0,说明还需要多移动几圈,将Cycle-Num减1

(2)如果是0,说明马上要执行这个Task了,取出TriggerTaskFunction执行(可以用单独的线程来执行Task),并把这个Task从Set<Task>中删除

image image image

相关文章

  • 环形队列-高效定时触发

    为了实现高效延时触发,我们需要实现两个重要的数据结构: (1)环形队列,例如可以创建一个包含3600个slot的环...

  • 数组实现环形队列

    利用数组结构在队列的基础下用取模算法来实现环形队列。 环形队列拥有复用功能。 主要算法思想:1)front指向队列...

  • 2020-11-10-数据结构与算法-14(队列scala版)

    1.队列 非环形实现 2.队列环形版 核心思想: 用%来模拟循环(rear +1) /maxsize = firs...

  • 环形队列

    写完这篇文章想着以后尽量(应该说一定)使用现在正在使用的LPC系列的单片机写程序,其实内心感觉还是LPC做的相当完...

  • 环形队列

    1、概念 环形队列是一个最为简单的数据结构,底层用数组组成,然后逻辑上数组首尾相连。虽然他的结构极为简单,但是用处...

  • 环形队列

    利用数组通过取模的方式实现环形队列,使队列达到复用的效果。 图1中,rear和front分别代表队尾和队头并且初始...

  • 面向对象 js 高级(单线程+事件队列)

    1.单线程+事件队列 事件队列中的任务执行的条件: 主线程已经空闲 任务满足触发条件定时函数(延时时间已经达到)事...

  • C++数据结构探险——队列篇

    数据结构的原理 队列:先进先出(FIFO:first in first out) 普通队列: 环形队列: 以C++...

  • 数据结构

    稀疏数组 代码实现: 队列 代码实现: 环形队列 什么时候队列满:(rear+1)%maxsize == fron...

  • C环形队列

    环形队列是什么 队列是一种常用的数据结构,这种结构保证了数据是按照“先进先出”的原则进行操作的,即最先进去的元素也...

网友评论

      本文标题:环形队列-高效定时触发

      本文链接:https://www.haomeiwen.com/subject/fjjxzctx.html