disruptor实现细节及源码分析

本文详细介绍了Disruptor并发框架的背景、应用场景、核心对象,以及提供了简单的示例和实现原理。Disruptor以其无锁设计、高并发性能和预分配存储空间的优势,在生产者-消费者模式和发布订阅模式中有广泛应用。通过分析RingBuffer、Event、Sequencer等组件,展示了Disruptor如何实现高效的消息传递和处理。
摘要由CSDN通过智能技术生成

disruptor实现细节及源码分析

一、     背景介绍

     Disruptor它是一个开源的并发框架,并获得2011 Duke’s 程序框架创新奖,能够在无锁的情况下实现网络的Queue并发操作。

     说明:下文所有内容基于disruptor3.34版本。

二、     应用场景

     在消费者--生产者模式中或发布订阅模式中使用。

具有以下特点:

1.      无锁的设计及CAS式的原子访问。

2.      预分配存储空间,避免垃圾回收带来的资源消耗。

三、     核心对象

RingBuffer:环形的一个数据结构,对象初始化时,会使用事件Event进行填充。Buffer的大小必须是2的幂次方,方便移位操作。

 

Event:无指定具体接口,用户自己实现,可以携带任何业务数据。

 

EventFactory:产生事件Event的工厂,由用户自己实现。

 

EventTranslator:事件发布的回调接口,由用户实现,负责将业务参数设置到事件中。

 

Sequencer:序列产生器,也是协调生产者和消费者及实现高并发的核心。有MultiProducerSequencer 和 SingleProducerSequencer两个实现类。

 

SequenceBarrier:拥有RingBuffer的发布事件Sequence引用和消费者依赖的Sequence引用。决定消费者消费可消费的Sequence。

 

EventHandler:事件的处理者,由用户自己实现。

 

EventProcessor:事件的处理器,单独在一个线程中运行。

 

WorkHandler:事件的处理者,由用户自己实现。

 

WorkProcessor:事件的处理器,单独在一个线程中运行。

 

WorkerPool:一组WorkProcessor的处理。

 

WaitStrategy:在消费者比生产者快时,消费者处理器的等待策略。

 

四、     简单示例

1.        定义业务数据类:

 public class MyData {

    private long value;

   

    public MyData(long value){

       this.value = value;

    }

 

    public long getValue() {

       return value;

    }

 

    public void setValue(long value) {

       this.value = value;

    }

 

    public String toString(){

       StringBuffer sb = new StringBuffer();

       sb.append("value=").append(value);

       return sb.toString();

    }

}

 

2.        定义事件类:

  public class MyEvent {

 

    private MyData data;

 

    public MyData getData() {

       return data;

    }

 

    public void setData(MyData data) {

       this.data = data;

    }

   

}

 

3.        定义事件处理类:

 public class MyEventHandler implements EventHandler<MyEvent>{

 

    @Override

    public void onEvent(MyEvent event, long sequence, boolean endOfBatch)

          

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值