你以为的延时队列真的是你以为的么

栏目: Redis · 发布时间: 6年前

内容简介:特点:定期轮训数据库,设置状态。特点: 无界、延迟、阻塞队列这里为什么要用leader/follower模式?

特点:定期轮训数据库,设置状态。

优点:实现简单
缺点:数据量过大时会消耗太多的IO资源,效率太低
复制代码

2.2 DelayQueue

特点: 无界、延迟、阻塞队列

a、BlockingQueue+PriorityQueue(堆排序)+Delayed
b、DelayQueue中存放的对象需要实现compareTo()方法和getDelay()方法。
c、getDelay方法返回该元素距离失效还剩余的时间,当<=0时元素就失效了,
就可以从队列中获取到。
复制代码
你以为的延时队列真的是你以为的么
你以为的延时队列真的是你以为的么

这里为什么要用leader/follower模式?

  • 如果不是队首节点,根本不需要唤醒操作!
  • 假设取值时,延时时间还没有到,那么需要等待,但这个时候,队列中新加入了一个延时更短的,并放在了队首,那么 此时,for循环由开始了,取得是新加入的元素,那之前的等待就白等了,明显可以早点退出等待!
  • 还有就是如果好多线程都在此等待,如果时间到了,同时好多线程会充等待队列进入锁池中,去竞争锁资源,但结果只能是一个成功, 多了写无畏的竞争!(多次的等待和唤醒)
    你以为的延时队列真的是你以为的么

2.3 Timer与TimerTask

你以为的延时队列真的是你以为的么
  • TaskQueue中的 排序 是对TimerTask中的下一次执行时间进行堆排序,每次去取数组第一个。
  • 而delayQueue是对queue中的元素的getDelay()结果进行排序

Timer是一种定时器工具,用来在一个后台线程计划执行指定任务。它可以计划执行一个任务一次或反复多次。 主要方法:

你以为的延时队列真的是你以为的么
你以为的延时队列真的是你以为的么

2.4 时间轮(kafka)

时间轮名词解释:

  • 时间格:环形结构中用于存放延迟任务的区块;
  • 指针(CurrentTime):指向当前操作的时间格,代表当前时间
  • 格数(ticksPerWheel):为时间轮中时间格的个数
  • 间隔(tickDuration):每个时间格之间的间隔
  • 总间隔(interval):当前时间轮总间隔,也就是等于ticksPerWheel*tickDuration
你以为的延时队列真的是你以为的么
你以为的延时队列真的是你以为的么

根据每个TimerTaskEntry的过期时间和当前时间轮的时间,选择一个合适的bucket(实际上就是TimerTaskList),把这个TimerTaskEntry对象放进去,同时如果bucket的过期时间有更新,就将这个bucket推进DelayQueue,重新排序

例子:假设编号为0的时间格或者桶保存着到期时间为t,每一个tick的持续时间(tickDuration)为20ms,在这个格子里只能保存着到期时间为[t~t+20]ms的任务,假设时间轮的时间格有n个,每一个间隔1ms,到期时间为m(ms),那么计算公式m%n = 所在的时间格或者桶,比如n=10,m=34ms,那么他所在桶或者时间格是4

2.5 RabbitMQ-延时任务

RabbitMQ本身没有直接支持延迟队列功能,但是可以通过以下特性模拟出延迟队列的功能。

RabbitMQ可以针对Queue和Message设置 x-message-tt,来控制消息的生存时间,如果超时,则消息变为dead letter RabbitMQ针对队列中的消息过期时间有两种方法可以设置。 A: 通过队列属性设置,队列中所有消息都有相同的过期时间。 B: 对消息进行单独设置,每条消息TTL可以不同。

你以为的延时队列真的是你以为的么

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web 2.0界面设计模式

Web 2.0界面设计模式

黄玮 / 电子工业出版社 / 2013-9-1 / 59

本书集Web 2.0的发展及特点、Web 2.0界面设计模式基本理论、实际模式实践及代码实现等诸多内容于一身,具有很强的实用性。这些内容不是简单的顺序堆砌,而是以Web 2.0界面设计模式和应用为主线,其中完美地穿插了各种与之相关的Web 2.0设计理念、用户行为模式、用户体验及基于Dojo的实现方式等相关知识,真正做到将Web 2.0界面设计模式所需要的方方面面的知识有机地融为一个整体。实现不需......一起来看看 《Web 2.0界面设计模式》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具