如图所示,RingBuffer就像是一个环形数组,你使用这个数据结构在不同的线程之间传递数据。同时,RingBuffer有一个指针,我们也可以把它看成是一个序列号,它指在了下一个可用的位置,它是不停增加的。当你从RingBuffer填写数据,或者是从中读取数据时,换个序列号会递增,由于数组是环形的关系,它并会覆盖环绕以前经过的位置。为了确认当前我们可以使用的数组位置,可以使用求余的操作计算当前的位置:sequence mod array length = array index
图中,可以看到有一个环形队列,这里的这个队列就是普通的环形数组(带有头尾指针的)。这个环形数组在交易系统中,起到了消息传递的作用。系统中,从这个消息队列中读取消息的时候,必须使用锁来对其进行一致性的控制,因为同一个时间,我们有两个生产者(AM82进程和MM52进程)在不断竞争着往Order Ring Buffer中写入数据。在系统的设计中,我们对产品按SET进行了划分,不同类型的订单会被分发到不同的主机上,由单独这个机器上的两个生产者进行写处理。所以两个生产者进程现在可以应付,并且在性能上有所保证。但是如果我们今后有了新业务,遇上新需求,碰到了一些绕不开的单点问题上(比如期权业务中的保证金问题,保证金不能按SET划分,必须控制在一台机器上),必须要引入更多的进程进行读写时,Disruptor中RingBuffer的设计思想和理念,应该是一种很好的借鉴。