目录

系列索引

前言

主要内容

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解析相关推荐

  1. mybatis源码阅读(三):mybatis初始化(下)mapper解析

    转载自 mybatis源码阅读(三):mybatis初始化(下)mapper解析 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单. ...

  2. MyBatis 源码分析 - 映射文件解析过程

    1.简介 在上一篇文章中,我详细分析了 MyBatis 配置文件的解析过程.由于上一篇文章的篇幅比较大,加之映射文件解析过程也比较复杂的原因.所以我将映射文件解析过程的分析内容从上一篇文章中抽取出来, ...

  3. 【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 ...

  4. 【flink】Flink 1.12.2 源码浅析 : yarn-per-job模式解析 yarn 提交过程解析

    1.概述 转载:Flink 1.12.2 源码浅析 : yarn-per-job模式解析 [二] 请大家看原文去. 接上文Flink 1.12.2 源码分析 : yarn-per-job模式浅析 [一 ...

  5. 【flink】Flink 1.12.2 源码浅析 : yarn-per-job模式解析 从脚本到主类

    1.概述 转载:Flink 1.12.2 源码浅析 : yarn-per-job模式解析 [一] 可以去看原文.这里是补充专栏.请看原文 2. 前言 主要针对yarn-per-job模式进行代码分析. ...

  6. 手机QQ侧滑菜单_从源码上一步步解析效果的实现

    本文思想来自洪洋大哥,本来写的原创的,有些朋友看到标题后认为是照搬翔哥的例子,仔细看看,会有不同,不过其中的主要思想还是翔哥的,滑动方面的算法还真是有些区别的,看完了就知道不一样,而且我这人比较啰嗦, ...

  7. 【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 ...

  8. Android Fragment 从源码的角度去解析(上)

    ###1.概述 本来想着昨天星期五可以早点休息,今天可以早点起来跑步,可没想到事情那么的多,晚上有人问我主页怎么做到点击才去加载Fragment数据,而不是一进入主页就去加载所有的数据,在这里自己就对 ...

  9. [darknet源码系列-2] darknet源码中的cfg解析

    [darknet源码系列-2] darknet源码中的cfg解析 FesianXu 20201118 at UESTC 前言 笔者在[1]一文中简单介绍了在darknet中常见的数据结构,本文继续上文 ...

最新文章

  1. 1.解决python中导入包不成功的问题(出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url问题)
  2. softmax简单模型处理Mnist分类问题
  3. SpringBoot+Shiro+ehcache实现登录失败超次数锁定帐号
  4. 【嵌入式】使用Cross Toolchain构建交叉工具链
  5. 查找工资前三高的员工
  6. Android导入第三方类库
  7. 2021-08-08 事务的提交,回滚
  8. 冰冻三尺,非一日之寒。数据解析——xpath(1)
  9. 撰写 SCI 论文时,有什么好用的软件或者技巧吗?
  10. 将java封装的实体类数据生成excel供下载
  11. 改变文本颜色和字体大小的脚本
  12. Flink重启策略Restart-Strategy
  13. 好友克隆自助下单网站_新进合伙人如何发朋友圈
  14. torch中repeat()函数的准确理解
  15. 知云文献翻译打不开_沙拉查词—— 划线翻译的一股清流
  16. 学了 C 语言到底能做什么, 能从事什么工作?(附课程)
  17. 【考研英语语法】一般现在时练习题
  18. SQL server已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行(2行)
  19. Java练习——输入n个数,存入数组,进行排序输出
  20. 网络字节序和主机字节序

热门文章

  1. springboot 最新腾讯云短信接入的坑(包含所有操作流程)
  2. imperva代理拦截
  3. 男人必听九大歌曲精选
  4. codeblocks的下载、安装与创建
  5. 技法の穴をふさぐ:工数編 --技法の穴をふさぐ:工数編
  6. Nginx的proxy_pass和fastcgi_pass
  7. PacBio三代宏基因组测序大幅提升海洋水体宏基因组研究效果
  8. 上传文件连接失败问题
  9. python画苹果标志图片_替换/绘制/分享:让所有 App 拥有 macOS 11 Big Sur 风格的图标...
  10. 转:PM产品设计九步法