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