disruptor高性能环形队列

2023-11-16

简介

说到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内

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

disruptor高性能环形队列 的相关文章

随机推荐

  • Qt对象树

    01 什么是对象树 是用来组织和管理所有 QObject及其子类创建的对象 父对象 this 或 setParent 02 对象树的基本规则 对象树创建规则 对于Qt程序来说 父对象通常创建在栈上 子对象应创建在堆中 new 无需手动 de
  • ReentrantReadWriteLock原理分析

    在介绍ReentrantReadWriteLock读写锁原理之前 先来说下写锁与读锁 方便后续大家的理解 1 当资源被写锁占用时 此时是不允许去读的 只有当写锁被释后读锁才能去申请资源 2 当资源没有被写锁占用时 多个线程是可以共享资源 写
  • PyPI使用国内源

    PyPI使用国内源 https www cnblogs com sunnydou p 5801760 html 通过几次 的使用 对于默认的pip源的速度实在无法忍受 于是便搜集了一些国内的pip源 如下 阿里云 http mirrors
  • spring中基于AOP的基本配置

    Aop的概念 在不修改原有代码的情况下 增强跟主要业务没有关系的公共功能代码到 之 前写好的方法中的指定位置 这种编程的方式叫AOP 注意 AOP的底层用的代理 代理是一种设计模式 代理分为静态代理和动态代理 静态代理 静态代理需要自己建立
  • Angular ng-container ng-template 用法

    ng container本身不创建任何html代码 相当于一个容器
  • 对TCP/IP的深入浅出归纳【WEB开发者】腾讯认证空间

    前段时间做了一个开发 涉及到网络编程 开发过程比较顺利 但任务完成后始终觉得有一些疑惑 主要是因为对网络协议不太熟悉 对一些概念也没弄清楚 后来 我花了一些时间去了解这些网络协议 现在对TCP IP网络协议有了初步的认识 在这里总结出来 可
  • [MySQL]表的创建、修改与删除

    文章目录 1 MySQL中的数据类型 1 1 常用的数据类型 2 创建表 2 1 方式一 创建空的新表 2 1 1 新表的创建 2 1 2 查看表结构 2 1 3 查询创建表的语句 2 2 方式二 基于现有的表创建表 2 3 练习 2 3
  • 自旋锁

    临界区使用原则 空闲让进 没有进程在临界区时 想进入临界区的进程可进入 忙则等待 当已有进程进入临界区时 其他试图进入临界区的进程必须等待 有限等待 对请求访问的进程 应保证能在有限时间内进入临界区 让权等待 当进程不能进入临界区时 应立即
  • C++中,new一个对象,有无括号,括号中this含义,堆区和栈区 声明和定义 自动初始化

    堆区和栈区 Qt中 仅仅声明和定义 局部变量和成员变量 会自动初始化 堆区 成员变量 为例 地址不同 值相同 栈区 局部变量 为例 地址不同 值相同 int p qDebug lt lt p lt lt p lt lt p qDebug l
  • STN系列之人脸检测

    介绍一篇微软用STN做人脸检测的工作 Supervised Transformer Network for Efficient Face Detection Dong Chen Gang Hua Fang Wen and Jian Sun
  • Pytorch中卷积与池化等的实现以及模型搭建

    在上一篇文章中已经介绍了Pytorch中Dataset类以及Transform类中一些方法的使用 接下来介绍利用Pytorch来实现卷积等操作的实现 一 nn Module类 一个nn Module是神经网络的基本骨架 可以视为一个块 如果
  • UnicodeDecodeError: ‘gb2312‘ codec can‘t decode byte 0xe5 in position 1 解决过程

    python运行过程中倘若出现如下错误 UnicodeDecodeError gb2312 codec can t decode byte 0xe5 in position 1 illegal multibyte sequence 可以尝试
  • Shamir门限方案的秘钥分享(包括逆元求解)

    Shamir门限方案的秘钥分享 不要求支持大数 题目描述 实验目的 通过基于Shamir门限方案的密钥分割及恢复的演示 理解密钥分割的重要性 理解密钥分割的基本原理和作用 掌握基于Shamir门限方案的密钥分割软件的使用 实验原理 秘密共享
  • 截取字符串中所有的数字字符

    截取字符串中的数字 param s return public static String trimToNumber String s int n s length char a new char n int len 0 for int i
  • const定义的变量,可以作为数组[ ]里面的值吗?

    结论 在c中是不可以的 在c 中可以 证明 C 编译器把Const对象放在了符号表之中 C语言一般是放在只读数据区 为什么C 编译器这么做 我想一个原因就是减少一些存储操作次数 const c int main const int a 10
  • fastadmin 微信H5支付返回格式

    记录 使用 fastadmin 的epay插件进行调用微信H5支付时 默认情况下 返回格式化的跳转页面html代码 但前端若使用vue或uni app来编写就不适用了 直接返回支付跳转地址 addons epay library Servi
  • Ubuntu 16.04.4 LTS下安装JDK

    Ubuntu 16 04 4 LTS下安装JDK 阅读目录 写在前面 方法 测试 结束 写在前面 为什么我又装jdk 今天顺手升级了我的双系统中的Ubuntu 开始的时候用的图形化界面升级 后来你懂的 升级软件死锁了 用命令行也没有效果了
  • MySQL 索引原理

    MySQL索引深入剖析 官方定义是 索引 Index 是帮助MySQL高效获取数据的数据结构 简单来说 索引是一种数据结构 以协助快速查询 更新数据库表中数据 索引的基本原理 把创建索引列的内容进行排序 对排序的结果生成倒排表 在倒排表内容
  • 关于 ag-grid 的调研之路

    前言 因为公司业务需要 需要对 ag grid数据网格进行调研 随后就开始了漫长的探索之路 废话不多说直接撸干活 ag grid 简介 AG Grid是一个功能齐全 高度可定制的JavaScript数据网格 它提供了卓越的性能 没有第三方依
  • disruptor高性能环形队列

    简介 说到Disruptor 首先需要谈谈LMAX 它是欧洲第一家也是唯一一家采用多边交易设施Multilateral Trading Facility MTF 拥有交易所牌照和经纪商牌照的欧洲顶级金融公司 它们所构建的金融交易平台 建立在