Disruptor中锁对性能有什么影响

技术Disruptor中锁对性能有什么影响本篇文章给大家分享的是有关Disruptor中锁对性能有什么影响,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Di

本文讲述的是中断器中的锁如何影响性能。边肖觉得很实用,所以想分享给大家学习。希望大家看完这篇文章能有所收获。我不多说。让我们和边肖一起看看。

颠覆者是英国外汇交易公司LMAX开发的高性能队列。研发的初衷是为了解决内存队列的延迟问题(在性能测试中发现与I/O操作处于同一数量级)。基于Disruptor开发的系统,单线程每秒可支持600万订单,2010年在QCon演讲后获得业界关注。2011年,企业应用软件专家马丁福勒写了一篇很长的介绍。同年,还获得甲骨文官方杜克奖。

目前,包括Apache Storm、Camel、Log4j 2在内的很多知名项目都应用了Disruptor来获得高性能。它在美团的技术团队中也有很多应用,一些项目架构借鉴了它的设计机制。本文从实战角度分析了干扰机的实现原理。

特别是这里提到的队列是系统的内存队列,而不是像卡夫卡那样的分布式队列。此外,本文中描述的中断器或功能仅限于3.3.4。

在介绍Disruptor之前,我们先来看看常用的线程安全内置队列有什么问题。下表显示了Java的内置队列。

队列有界锁数据结构数组锁队列有界锁数组锁队列可选-有界锁链接列表并发链接队列无界无锁链接列表链接传输。queue无界解锁的linked list priorityblockingqueueunbounded锁定的heapdelayqueue无界锁定的堆队列一般分为三种类型:数组、链表和堆。其中,堆一般用于实现具有优先级特征的队列,暂不考虑。

从数组和链表两种数据结构来看,ArrayBlockingQueue是一种典型的基于数组线程安全的队列,主要通过锁来保证线程安全。基于链表的线程安全队列可以分为两类:LinkedBlockingQueue和ConcurrentLinkedQueue。前者也是通过锁定实现线程安全,而后者和上表中的LinkedTransferQueue是通过原子变量比较和交换(以下简称“CAS”)实现的,没有锁定。

无锁实现的队列是无界的(不能保证队列长度在一定范围内);锁定的方式可以实现有界队列。在稳定性要求极高的系统中,为了防止生产者运行过快,造成内存溢出,只能选择有界队列。同时,为了减少Java垃圾收集对系统性能的影响,将尽可能选择数组/堆格式的数据结构。这样,只有ArrayBlockingQueue是合格的。

在实际使用中,由于锁定和伪共享,ArrayBlockingQueue会有严重的性能问题。下面我们来分析一下。

00-1010在实际编程过程中,锁定通常会严重影响性能。线程将被挂起,因为它们不能竞争锁,当锁被释放时,它们将被恢复。在这个过程中,有很多开销,通常会有很长的中断,因为当一个线程在等待锁时,它不能做其他任何事情。如果线程在持有锁时被延迟,例如页面错误、调度延迟或其他类似情况,则所有需要该锁的线程都无法执行。如果被阻塞线程的优先级较高,而持有锁的线程的优先级较低,则会发生优先级反转。

颠覆者的论文讲述了一个实验:

这个测试程序调用一个函数,该函数自动将64位计数器递增5亿次。

机器环境:2.4G 6核。

操作:64位计数器累计5亿次。

方法时间(毫秒)单线程300个带cas的单线程5,700个带锁的单线程10,000个带volatile write的单线程4,700个带cas的双线程30,000个带锁的双线程224,000个cas操作比不带锁的单线程慢一个数量级。当有锁且多线程并发时,速度比没有锁的单线程慢3个数量级。可见,无锁速度是最快的。

单线程条件下,解锁CAS操作的性能就是锁定CAS操作的性能。

在多线程的情况下,为了保证线程安全,必须使用CAS或lock。在这种情况下,CAS的性能超过了lock,前者是后者的8倍左右。

以上是中断器中锁对性能的影响。边肖认为,一些知识点可能会在我们的日常工作中看到或使用。我希望你能通过这篇文章学到更多的知识。更多详情请关注行业资讯频道。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/39234.html

(0)

相关推荐

  • activity和singletask(task和activity有什么区别)

    技术Activity的singleTask有什么作用本篇内容主要讲解“Activity的singleTask有什么作用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Activ

    攻略 2021年12月18日
  • [bzoj2303][Apio2011]方格染色

    技术[bzoj2303][Apio2011]方格染色 [bzoj2303][Apio2011]方格染色Sam和他的妹妹Sara有一个包含n×m个方格的表格。她们想要将其的每个方格都染成红色或蓝色。
    出于

    礼包 2021年11月25日
  • oracle中日期时间型timestamp怎么用

    技术oracle中日期时间型timestamp怎么用这篇文章将为大家详细讲解有关oracle中日期时间型timestamp怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、字符型

    攻略 2021年11月11日
  • node.js有什么指令

    技术node.js有什么指令小编给大家分享一下node.js有什么指令,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

    攻略 2021年12月13日
  • catboost特征学习(catboost详细使用教程)

    技术怎么使用CatBoost进行快速梯度提升本篇文章给大家分享的是有关怎么使用CatBoost进行快速梯度提升,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

    攻略 2021年12月21日
  • 馒头冷冻能保存多久,馒头一般保存多久还可以吃

    技术馒头冷冻能保存多久,馒头一般保存多久还可以吃你好!我是美食领域创作者娜小厨 ,很高兴可以为你解答问题馒头冷冻能保存多久。馒头属于发面类面食,内部结构宣软蓬松 气孔较多 。特别容易滋生细菌 。尤其是黄曲霉菌 。曲霉特别

    生活 2021年10月22日