Disruptor
任性之闲来无事
共勉
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Disruptor源码分析(五)WaitStrategy
针对不同的应用场景,为了尽量提高处理性能,Disruptor提供了多种生产者和消费者之间的同步策略。 在此只对常用的四种同步策略的实现进行说明,其它实现不在详述。 BlockingWaitStrategy BlockingWaitStrategy源码如下: public final class BlockingWaitStrategy implements WaitStrategy { ...原创 2019-12-06 18:10:28 · 2056 阅读 · 0 评论 -
Disruptor源码分析(四)Sequencer
针对不同的应用场景,为了尽量提高处理性能,Disruptor提供了SingleProducerSequencer和MultiProducerSequencer两种sequencer,分别对应单生产者模式和多生产者模式。 SingleProducerSequencer 在单生产者模式中,由于只有一个生产者,所以在获取下一个可用序列号时,不会存在多线程竞争的情况,所以直接用一个long类型变量nex...原创 2019-12-06 18:07:58 · 1062 阅读 · 0 评论 -
Disruptor源码分析(三)Sequence
Sequence是RingBuffer中一个很重要的类,它就是指我们用来发布事件的递增序列号,只不过为了更好的使用Disruptor对其做了进一步的封装。 public class Sequence extends RhsPadding { static final long INITIAL_VALUE = -1L; private static final Unsafe UN...原创 2019-12-06 18:06:02 · 703 阅读 · 0 评论 -
Disruptor源码分析(二)RingBuffer
RingBuffer,从字面上看,它是一个环形缓冲队列。实际上,它不是一个队列,因为它不具备队列的特性,比如FIFO等。 RingBuffer本身是一个数组,之所以说它是环形队列,因为它通过算法维持了一个类似环形队列的数据结构。 上图是对RingBuffer的一个抽象描述。 假定一个8个槽的RingBuffer,则本质上是一个长度为8的数组,那如何模拟一个环形队列呢? 通过序列号(se...原创 2019-12-06 18:04:45 · 1109 阅读 · 0 评论 -
Disruptor源码分析(一)概述
此系列关于Disruptor源码分析,主要是自己在使用Disruptor过程中,对于一些自认为比较关键的设计的总结,供自己以后使用。所以,没有花费太大的篇幅进行详细的说明。 在此发布出来,供大家参考。 由于时间紧迫,所以可能存在错误的地方,欢迎指出。 Disruptor主要类图如下: ...原创 2019-12-06 18:00:05 · 646 阅读 · 0 评论 -
剖析Disruptor:为什么会这么快?(四)揭秘内存屏障
作者:Martin Thompson 译者:丁一 最近我博客文章更新有点慢,因为我在忙着写一篇介绍内存屏障(Memory Barries)以及如何将其应用于Disruptor的文章。问题是,无论我翻阅了多少资料,向耐心的Martin和Mike请教了多少遍,以试图理清一些知识点,可我总是不能直观地抓到重点。大概是因为我不具备深厚的背景知识来帮助我透彻理解。 所以,与其像个傻瓜一样试图去解释一些...转载 2019-12-04 14:29:15 · 255 阅读 · 0 评论 -
剖析Disruptor:为什么会这么快?(三)伪共享
作者:Martin Thompson 译者:丁一 缓存系统中是以缓存行(cache line)为单位存储的。缓存行是2的整数幂个连续字节,一般为32-256个字节。最常见的缓存行大小是64个字节。当多线程修改互相独立的变量时,如果这些变量共享同一个缓存行,就会无意中影响彼此的性能,这就是伪共享。缓存行上的写竞争是运行在SMP系统中并行线程实现可伸缩性最重要的限制因素。有人将伪共享描述成无声的性...转载 2019-12-04 14:22:52 · 263 阅读 · 0 评论 -
剖析Disruptor:为什么会这么快?(二)神奇的缓存行填充
作者:Martin Thompson 译者:丁一 我们经常提到一个短语Mechanical Sympathy,这个短语也是Martin博客的标题(译注:Martin Thompson),Mechanical Sympathy讲的是底层硬件是如何运作的,以及与其协作而非相悖的编程方式。 我在上一篇文章中提到RingBuffer后,我们收到一些关于RingBuffer中填充高速缓存行的评论和疑问...转载 2019-12-04 14:16:56 · 189 阅读 · 0 评论 -
剖析Disruptor:为什么会这么快?(一)锁的缺点
作者:Trisha’s 译者:张文灼,潘曦整理和校对:方腾飞,丁一 Martin Fowler写了一篇非常好的文章,里面不仅提到了Disruptor,而且还解释了Disruptor如何应用在LMAX的架构里。里面有提及了一些目前没有涉及的概念,但最经常问到的问题是“Disruptor究竟是什么?"。 目前我正准备在回答这个问题,但首先回答"为什么它会这么快?" 这些问题持续出现,但是...转载 2019-12-04 14:09:37 · 277 阅读 · 0 评论
分享