简介
说到Disruptor,首先需要谈谈LMAX。它是欧洲第一家也是唯一一家采用多边交易设施Multilateral Trading Facility(MTF)拥有交易所牌照和经纪商牌照的欧洲顶级金融公司。它们所构建的金融交易平台,建立在JVM平台上, 能够以很低的延迟(latency)产生大量交易(吞吐量)。 这个系统的核心是一个业务逻辑处理器,它能够在一个线程里每秒处理6百万订单. 这个业务逻辑处理器完全是运行在内存中(in-memory),使用事件源驱动方式(event sourcing)运行,这个业务逻辑处理器的核心是Disruptor。
从功能上讲Disruptor的功能与JDK中的BlockingQueue相似,但比BlockingQueue更加强大。通过Disruptor可以高效的实现线程间的消息通信。Disruptor主要有以下特点:
-
基于生产者/消费者模型,但支持多生产者/多消费者、广播、组播等模式。
-
为事件预先分配内存
-
支持多种等待策略,并且支持可选的无锁并发算法。
Disruptor的相关概念
Event事件
从生产者传递给消费者的数据单位,可以是任意的java bean。用以表示某一事件,并可存储相关业务参数。该bean由使用者根据自己的需求创建。
EventFactory事件工厂
用来创建的Event事件对象,由使用者实现。需要实现disruptor中的EventFactory接口,Disruptor会通过该工厂来实现为事件预分配内存(即在初始化disruptor时就创建好所有事件对象)的操作。
EventHandle事件消费者
事件的消费者,需要实现Disruptor的EventHandle接口。
WaitStrategy等待策略
所谓等待策略就是Disruptor的消费者在空闲状态下采用何种方式等待任务,不同策略在不同的场景下都有不同的性能表现。在Disruptor中提供了四种等待策略
-
BlockingWaitStrategy 阻塞等待策略
BlockingWaitStrategy是disruptor的默认消费者等待策略。BlockingWaitStrategy内