
高并发数据结构(disruptor)
hashcon
做自媒体技术分享很久了,大家的抬爱与支持让我很开心很感激,但是个人本来做这些也并不是为了收益,只是为了个人学习与传播知识帮助更多的人,所以我将全网所有账号全部收益,持续捐给各种公益项目,也算不辜负大家的抬爱,也是回报祖国对我的一番培养。
曾任职于顺丰,华为,网易等公司,从Java小白,成长为资深开发与项目组首席架构师。喜欢源码与开源,曾贡献 MyCat1.6 核心源码,贡献过druid,Spring Cloud,dubbox,Apache RocketMQ,Apache Bookeeper 等多开源项目。
展开
-
高并发数据结构Disruptor解析(1)
最近想解决下MyCat开统计后TPS吞吐量总上不去的问题,于是想起了Disruptor这个东西。之前想研究过,但是,由于当时并不太需要,而且感觉官方示例比较怪异,就是知道他比较快,没有想用。现在捡起来好好研究下。 首先,推荐大家并发编程网的Disruptor译文. 官网的翻译,翻译的不错,从硬件到软件,谈了Disruptor相对于传统阻塞队列的优化。这里主要针对源代码谈实现和应用。 首先,先拿一原创 2016-06-02 19:14:21 · 13689 阅读 · 3 评论 -
高并发数据结构Disruptor解析(2)
Sequence(续)之前说了Sequence通过给他的核心值value添加前置无用的padding long还有后置无用的padding long来避免对于value操作的false sharing的发生。那么对于这个value的操作是怎么操作的呢? 这里我们需要先了解下Unsafe类这个东西,可以参考我的另一篇文章 - Java Unsafe 类。 Unsafe中有一些底层为C++的方法,对原创 2016-07-26 19:08:29 · 11439 阅读 · 3 评论 -
高并发数据结构Disruptor解析(3)
ProducerMultiProducerSequencer下面是多生产者核心类MultiProducerSequencer的类继承关系,与之前讲的SingleProducerSequencer相似: MultiProducerSequencer是多生产者类,线程安全,与单一生产者不同的是,这里的cursor不再是可以消费的标记,而是多线程生产者抢占的标记。可以消费的sequence由avai原创 2016-07-27 11:15:49 · 8133 阅读 · 5 评论 -
高并发数据结构Disruptor解析(4)
RingBufferRingBuffer类是Disruptor核心的数据结构类。它是一个环状的Buffer,上面的槽(slot)可以保存一个个Event。下面是Disruptor中RingBuffer类继承关系: 除了实现之前提到过的Sequenced和Cursored接口,这里还涉及到了DataProvider这个接口。public interface DataProvider原创 2016-07-30 10:16:55 · 10087 阅读 · 0 评论 -
高并发数据结构Disruptor解析(5)
WaitStrategy在Disruptor中,有很多需要等待的情况。例如:使用了SequenceBarrier的消费者需要在某种条件下等待,比如A消费者和B消费者,假设A消费者必须消费B消费者消费完的。 这些等待,还有唤醒等待的方法,由如下的WaitStrategy实现: 我们先来看接口类:原创 2016-08-01 09:53:47 · 9077 阅读 · 0 评论 -
高并发数据结构Disruptor解析(6)
SequenceBarrierSequenceBarrier是消费者与Ringbuffer之间建立消费关系的桥梁,同时也是消费者与消费者之间消费依赖的抽象。 SequenceBarrier只有一个实现类,就是ProcessingSequenceBarrier。ProcessingSequenceBarrier由生产者Sequencer,消费定位cursorSequence,等待策略waitStra原创 2016-08-08 10:56:29 · 17142 阅读 · 0 评论