美文网首页
关于时间轮

关于时间轮

作者: 丑人林宗己 | 来源:发表于2020-06-15 22:42 被阅读0次

最近翻看了去哪儿的QMQ的关于延时队列的源码,主要就是想要了解它在延时队列上实现的设计方案。

image.png

1、延时消息投递到delay-server
2、顺序不断写message log,主要是为了提高性能,写完即响应。
3、回放message log的内容,按照延时时间写到对应的schedule log
4、工作线程从schedule log读取内容后写到内存队列中
5、时间轮线程维护时间轮,并在指针转动的每一次从内存队列中读取数据,按照延时时间依次放入时间轮上的bucket(bucket是一个链表),时间轮的本质是相较于当前时间,延时时间落在时间轮上第几轮的第几格。

long calculated = timeout.deadline / tickDuration;
timeout.remainingRounds = (calculated - tick) / wheel.length;

final long ticks = Math.max(calculated, tick); // Ensure we don't schedule for past.
int stopIndex = (int) (ticks & mask);

6、将到期(超时)的节点(bucket上的node)发送给实时队列,并将对应的Sequence写入到dispatch log.
7、dispatch log的要解决重复发送的问题,但其实这种方案不如将该实现下放给业务

核心类参考:

WheelTickManager
HashedWheelTimer // 时间轮
Receiver // 接收消息类
MessageLog // messgae log
DispatchLog // 
ScheduleLog //

ps:相较于滴滴跟美团的方法,还是去哪儿开源的这个延时解决方案更有优势。

相关文章

  • 关于时间轮

    最近翻看了去哪儿的QMQ的关于延时队列的源码,主要就是想要了解它在延时队列上实现的设计方案。 1、延时消息投递到d...

  • 时间轮

    参考代码 hzlulu/TimingWheel TimerTask 时间轮中任务类的抽象类。实现Runnable...

  • 时间轮

    https://zhuanlan.zhihu.com/p/102476356[https://zhuanlan.z...

  • 时间轮

    前言 时间轮是一个非常高效且低成本的计时算法,论文地址《Hashed and Hierarchical Timin...

  • 关于“A轮融资的时间点问题”

    天使阶段的团队,时常会问股东投资人的问题:“咱们什么时候融A轮?” 时间点有4个:烧钱点、谈判点、融资点、发展点 ...

  • 宇宙的恩典

    又有一些时间没做喜悦曼陀罗了,这几天总是会冒出关于打开脉轮的念头看到关于脉轮的文字,最近又开始练习喜悦曼陀罗了,真...

  • 关于“鸡尾酒会效应”

    逻辑课,只完整地跟过第9轮,然后断断续续在听第一轮和第二轮,所以,关于逻辑,依然没入门,处于小白阶段。 听课的时间...

  • 情绪体~喉轮~关系

    打破一层外壳,又进入一个新的轮回,关于表达,关于关系,关于爱,喉轮,生殖轮,心轮。一直不肯接受与改变的一个面向,总...

  • 浅论时间轮

    基于时间轮的定时器 定时器的实现多采用最小堆,其创建和删除复杂度为O(logN),tick的复杂度为O(1);在极...

  • 时间之轮

    八点起床,手机没你的消息。在忙吧,反正也无话可说。我过我的生活,你享受你的人生,做你想做的事情,我们一点交集都没有...

网友评论

      本文标题:关于时间轮

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