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)

相关推荐

  • 世界各国人口,现今世界各国人口形势怎么样

    技术世界各国人口,现今世界各国人口形势怎么样谢谢邀请世界各国人口,人口是人类发展的根本,截止目前全球总人数约为77.17亿人(数据来自上海自然博物馆),全球人口的不断增多,既增强了人类的能力,又给地球带来了负担。对于一个

    生活 2021年10月22日
  • 中国人民银行个人征信中心,怎样注册个人征信中心帐号

    技术中国人民银行个人征信中心,怎样注册个人征信中心帐号人民银行的个人信用账号不是申请的,是当你产生信用行为后人民银行系统根据你的身份证号码自动生成一个你自己的信用账号中国人民银行个人征信中心。 1. 打开中国人民银行征信

    生活 2021年10月29日
  • MapReduce的工作原理是什么

    技术MapReduce的工作原理是什么本篇文章为大家展示了MapReduce的工作原理是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。开始聊mapreduce,mapredu

    攻略 2021年12月3日
  • 奶牛的英文,英文单词“cow”的读音是什么

    技术奶牛的英文,英文单词“cow”的读音是什么英式读音[kaʊ] 美式读音[kaʊ] n. 奶牛奶牛的英文,乳牛;母兽;雌(象,鲸等);对女性的蔑称; vt. 恐吓;吓唬;威胁; ①造句:He kep

    生活 2021年10月22日
  • Java 内存模型

    技术Java 内存模型 Java 内存模型Java 内存模型
    Java 内存模型简称JMM,全名 Java Memory Model 。Java 内存模型规定了 JVM 应该如何使用计算机内存(RAM)

    礼包 2021年11月24日
  • what是什么意思中文,whatsupman什么意思

    技术what是什么意思中文,whatsupman什么意思意思是:喂what是什么意思中文,伙计,最近怎样。What s up近来如何
    1、What` s up with this window, dude?
    这窗有什么

    生活 2021年10月24日