Disruptor源码解析三 RingBuffer解析
目录
系列索引
前言
主要内容
RingBuffer的要点
源码解析
系列索引
- Disruptor源码解析一 Disruptor高性能之道
- Disruptor源码解析二 Sequence相关类解析
- Disruptor源码解析三 RingBuffer解析
- Disruptor源码解析四 消费者的组织串联
- Disruptor源码解析五 消费者的具体实现
- Disruptor源码解析六 示例与性能压测
前言
前面篇章介绍了下Sequence相关类,这里主要介绍下集成了Sequence类的disruptor主要结构RingBuffer。
主要内容
类的继承结构:
类的主要成员:
RingBuffer的要点
避免缓存行伪共享
RingBufferFields中entries数组, 前后都加了缓存行填充避免伪共享。
预初始化
- entries预先都用工厂类进行了构造
集成了Sequencer
- 使用的是SingleProducerSequencer 或者 MultiProducerSequencer,进行生产和消费的管理
源码解析
类中的主要方法都是把Sequencer的方法封装了一下,基本没有什么复杂的逻辑,主要注意以下几点:
next()方法可能导致生产者永久阻塞,使用时需要保证消费者正常运行,自己改动生产者游标的时候(claim方法)一定要慎重,一般不建议改动。
- 使用ringBuffer发布,建议使用try-finally模式,即通过next拿到了一个sequence,必须通过RingBuffer发布出去,否则可能会导致整个数据结构不可用。
long sequence = ringBuffer.next();
try {Event e = ringBuffer.get(sequence);// Do some work with the event.
} finally {ringBuffer.publish(sequence);
}
Disruptor源码解析三 RingBuffer解析相关推荐
- mybatis源码阅读(三):mybatis初始化(下)mapper解析
转载自 mybatis源码阅读(三):mybatis初始化(下)mapper解析 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单. ...
- MyBatis 源码分析 - 映射文件解析过程
1.简介 在上一篇文章中,我详细分析了 MyBatis 配置文件的解析过程.由于上一篇文章的篇幅比较大,加之映射文件解析过程也比较复杂的原因.所以我将映射文件解析过程的分析内容从上一篇文章中抽取出来, ...
- 【flink】Flink 1.12.2 源码浅析 : yarn-per-job模式解析 JobMasger启动 YarnJobClusterEntrypoint
1.概述 转载:Flink 1.12.2 源码浅析 : yarn-per-job模式解析 [三] 上一章:[flink]Flink 1.12.2 源码浅析 : yarn-per-job模式解析 yar ...
- 【flink】Flink 1.12.2 源码浅析 : yarn-per-job模式解析 yarn 提交过程解析
1.概述 转载:Flink 1.12.2 源码浅析 : yarn-per-job模式解析 [二] 请大家看原文去. 接上文Flink 1.12.2 源码分析 : yarn-per-job模式浅析 [一 ...
- 【flink】Flink 1.12.2 源码浅析 : yarn-per-job模式解析 从脚本到主类
1.概述 转载:Flink 1.12.2 源码浅析 : yarn-per-job模式解析 [一] 可以去看原文.这里是补充专栏.请看原文 2. 前言 主要针对yarn-per-job模式进行代码分析. ...
- 手机QQ侧滑菜单_从源码上一步步解析效果的实现
本文思想来自洪洋大哥,本来写的原创的,有些朋友看到标题后认为是照搬翔哥的例子,仔细看看,会有不同,不过其中的主要思想还是翔哥的,滑动方面的算法还真是有些区别的,看完了就知道不一样,而且我这人比较啰嗦, ...
- 【flink】Flink 1.12.2 源码浅析 : yarn-per-job模式解析 TaskMasger 启动
1.概述 转载:Flink 1.12.2 源码浅析 : yarn-per-job模式解析 [四] 上一篇: [flink]Flink 1.12.2 源码浅析 : yarn-per-job模式解析 Jo ...
- Android Fragment 从源码的角度去解析(上)
###1.概述 本来想着昨天星期五可以早点休息,今天可以早点起来跑步,可没想到事情那么的多,晚上有人问我主页怎么做到点击才去加载Fragment数据,而不是一进入主页就去加载所有的数据,在这里自己就对 ...
- [darknet源码系列-2] darknet源码中的cfg解析
[darknet源码系列-2] darknet源码中的cfg解析 FesianXu 20201118 at UESTC 前言 笔者在[1]一文中简单介绍了在darknet中常见的数据结构,本文继续上文 ...
最新文章
- 1.解决python中导入包不成功的问题(出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url问题)
- softmax简单模型处理Mnist分类问题
- SpringBoot+Shiro+ehcache实现登录失败超次数锁定帐号
- 【嵌入式】使用Cross Toolchain构建交叉工具链
- 查找工资前三高的员工
- Android导入第三方类库
- 2021-08-08 事务的提交,回滚
- 冰冻三尺,非一日之寒。数据解析——xpath(1)
- 撰写 SCI 论文时,有什么好用的软件或者技巧吗?
- 将java封装的实体类数据生成excel供下载
- 改变文本颜色和字体大小的脚本
- Flink重启策略Restart-Strategy
- 好友克隆自助下单网站_新进合伙人如何发朋友圈
- torch中repeat()函数的准确理解
- 知云文献翻译打不开_沙拉查词—— 划线翻译的一股清流
- 学了 C 语言到底能做什么, 能从事什么工作?(附课程)
- 【考研英语语法】一般现在时练习题
- SQL server已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行(2行)
- Java练习——输入n个数,存入数组,进行排序输出
- 网络字节序和主机字节序