disruptor介绍 Martion Foler 在本身网站上写了一篇LMAX文章,LMAX是一种新型零售金融交易平台,可以以很低的延迟产生大量的交易。这个系统是创建在jvm平台,核心是一个业务逻辑处理器,可以在一个线程里美妙处理6百万订单。业务逻辑彻底是运行在内存中,使用事件源驱动方式。业务所及处理器的核心是disruptor disruptir 是一个开源并发框架,可以在无馊的状况下实现网络的queue并发操做 生产端将消息传入disruptor,disruptor主动将消息传送给消费端,而不是消费端来取数据。能够将disruptor理解为一个高效的队列。而且disruptor作了大量的缓存和无锁的并行计算。不是说disruptor能一个线程1秒内能消费6百万,而是能将6百万消息发送给消费者 Disruptor是一个高性能的异步处理框架,或者认为是最快的消息框架(轻量的JMS),也能够认为是一个观察者模式的实现。或者事件监听模式的实现。算法
在disruptor中,实现hello world 第一: 简历一个event类 第二: 简历一个工厂event类,用于建立event类实力对象 第三:须要有一个监听事件类,用于处理数据Event类 第四:测试:实例化disruptor实例,配置一系列参数。而后对disruptor绑定监听事件类,接受并处理数据 第五:在disruptor中,真正存储数据的核心叫作RingBuffer,咱们经过Disruptor实例拿到他,而后把数据生产处理,把数据加入RingBuffer的实例对象中便可。 disruptor实例化的几个参数含义: 1工厂类对象用于建立继承Event的类对象, 2缓冲区大小(必定是2的n次方), 3线程池,进行disruptr内部数据接收处理调度, 4 ProducerType.SINGLE 和 ProducerType.MULTI 指定当前生产者是只有一个仍是多个 5 一种策略,当生产端和消费端速度不对等时,处理的策略 - BlockingWaitsetrategy 最低效的策略,但其对cpu小号最小,而且在各类不一样部署环境中能提供更加一致的性能表现缓存
sleepIngWaitsetrategy 性能表现和BlockingWaitsetrategy差很少,对cpu小号也雷士,但其对生产者线程的影响最小,适用于异步日志相似的场景
YieldingWaitstrategy 性能最好的,适用于低延迟系统,在性能要求极高且事件处理线程数小于cpu逻辑核心数的场景中,推荐使用
生产者 1: ringBuffer 的next的方法获取下一个可放数据的槽,即索引 2: 经过上面的索引,get取出一个空的事件填充 3:获取要经过事件传递的业务数据 调用event的业务数据方法,如setValue 4:发布事件(publish方法必须在finnally中,发布的是索引位置) disruptor详细说明与使用 RingBuffer 是disruptor最主要的组件,在3.0后就开始仅仅负责存储和更新dis中流通的数据。 sequence disruptor使用sequence表示一个特殊的处理的序号。和disruptor同样,每一个消费者EventProcessor都维持一个sequnce。大部分的并发代码以来这些sequence值的运转,所以sequence支持多种当前为AtomicLong类的特性 sequencer:这是disruptor真正的核心,实现了这个借口的两种生产者俊实现了全部的并发方法,为了在生产者和消费者之间惊醒准确快速的数据传递 sequenceBarrier 是有sequencer生成的,而且包含了已经发布的的swquence的引用,这些sequence源于sequenceer和一些对的消费者的sequence。它包含了决定是否共消费者来消费的event的逻辑。 实际就是告诉哪一个环形队列哪一个位置的数据已经发布了,等待消费。而后经过sequenceBarrier的算法来协调消费和生成的关系策略网络
disruptor应用并发