disruptor 框架使用以及ringbuffer原理解析

Disruptor是一个高性能的并发框架,适用于生产者-消费者模型,与BlockingQueue相比,它支持多消费者并行处理,预分配内存,采用无锁设计。RingBuffer是Disruptor的核心,是一个循环数组,提供高效的消息传递。通过 CAS 操作保证线程安全,避免数据竞争,提升系统性能。
摘要由CSDN通过智能技术生成

在这里插入图片描述

Disruptor

概述

子主题 1

  • 从功能上来看,Disruptor 是实现了“队列”的功能,而且是一个有界队列。那么它的应用场景自然就是“生产者-消费者”模型的应用场合了。
    可以拿 JDK 的 BlockingQueue 做一个简单对比,以便更好地认识 Disruptor 是什么。
    我们知道 BlockingQueue 是一个 FIFO 队列,生产者(Producer)往队列里发布(publish)一项事件(或称之为“消息”也可以)时,消费者(Consumer)能获得通知;如果没有事件时,消费者被堵塞,直到生产者发布了新的事件。
    这些都是 Disruptor 能做到的,与之不同的是,Disruptor 能做更多:
    同一个“事件”可以有多个消费者,消费者之间既可以并行处理,也可以相互依赖形成处理的先后次序(形成一个依赖图);
    预分配用于存储事件内容的内存空间;
    针对极高的性能目标而实现的极度优化和无锁的设计;
    以上的描述虽然简单地指出了 Disruptor 是什么,但对于它“能做什么”还不是那么直截了当。一般性地来说,当你需要在两个独立的处理过程(两个线程)之间交换数据时,就可以使用 Disruptor 。当然使用队列(如上面提到的 BlockingQueue)也可以,只不过 Disruptor 做得更好。
    拿队列来作比较的做法弱化了对 Disruptor 有多强大的认识,如果想要对此有更多的了解,可以仔细看看 Disruptor 在其东家 LMAX 交易平台(也是实现者) 是如何作为核心架构来使用的,这方面就不做详述了,问度娘或谷哥都能找到。
    原文:https://blog.csdn.net/nuaazhaofeng/article/details/72918467

子主题 2

使用

子主题 1

  • 1.建Event类(数据对象)
  • 2.建立一个生产数据的工厂类,EventFactory,用于生产数据;
  • 3.监听事件类(处理Event数据)
  • 4.实例化Disruptor,配置参数,绑定事件;
  • 5.建存放数据的核心 RingBuffer,生产的数据放入 RungBuffer。
    • ringbuffer
      • 它是一个环(首尾相接的环),你可以把它用做在不同上下文(线程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值