JMH基准测试 Disruptor单机最快MQ

2024-01-06 20:48

本文主要是介绍JMH基准测试 Disruptor单机最快MQ,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、JMH:Java Microbenchmark Harness(java微基准测试)

实操步骤

  1. 新建Maven项目,导入JMH依赖jmh-core / jmh-generator-annprocess
  2. 编写测试类以及要测试的方法
  3. 在test包下新建测试类
  4. 写一个测试方法,导入要测试的方法并加上注解
  5. 运行测试方法得到测试报告
public class JMHTestDemo {@Benchmark/** 预热,让JVM完成即时编译优化 */@Warmup(iterations = 1, time = 3)/** 调用多少个线程执行程序 */@Fork(5)/** 测试模式,Throughput吞吐量模式,程序每秒能执行多少次 */@BenchmarkMode(Mode.Throughput)/** 调用多少次该方法测试 */@Measurement(iterations = 1, time = 3)public void testJMH(){/** 需要测试的方法 */JMHTest.PrimeTest();}
}

测试报告===》

Benchmark             Mode  Cnt  Score   Error  Units
JMHTestDemo.testJMH  thrpt    5  0.638 ± 0.074  ops/s

二、Disruptor

  • 无锁高并发的环形buffer消息队列,用于生产者消费者模式;

  • 首尾相连的ConcurrentArrayQueue,用数组实现,为了使用位运算数组容量为2的幂次方,插入删除或者取元素时都是对数组长度求mod运算(位运算12%8 = 12&(8-1))得到数组下标,这样比使用双向链表快,而且只需要维护一个指针,比链表的首位指针少一个;

  • 单机速度最快的MQ;

  • 性能极高,全是用的无锁CAS;

  • 内存高效队列,不支持持久化;

  • 八种等待策略:当生产者线程太多,消费者来不及消费时,会采用等待策略阻止生产者继续往队列里放元素,防止环形覆盖(阻塞、自旋、睡眠一段时间等)

  • 三大组成部分:1) 消息Event(环形队列指向的对象);2) 消息工厂EventFactory:生产消息的工厂;3) 消费者EventHandler(具体定义怎么消费消息)

  • 为了提高性能,会使用一个消息工厂,在new了一个disruptor之后会在环形数组中事先放好一个消息的初始对象,当生产者要往队列中放入一个消息时,直接在原有的初始消息对象上修改就行,不需要再经过new对象的过程,减少了GC频率;

  • 生产者有Multi和Single两个模式,当只有一个生产者时使用Single模式可以进一步提高效率;多线程模式的话加了锁会降低效率;

  • 异常处理:当消费者消费时出现异常可以使用自定义的异常处理方法;

这篇关于JMH基准测试 Disruptor单机最快MQ的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/577563

相关文章

mtu设置多少网速最快? 路由器MTU设置最佳网速的技巧

《mtu设置多少网速最快?路由器MTU设置最佳网速的技巧》mtu设置多少网速最快?想要通过设置路由器mtu获得最佳网速,该怎么设置呢?下面我们就来看看路由器MTU设置最佳网速的技巧... 答:1500 MTU值指的是在网络传输中数据包的最大值,合理的设置MTU 值可以让网络更快!mtu设置可以优化不同的网

python多线程并发测试过程

《python多线程并发测试过程》:本文主要介绍python多线程并发测试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、并发与并行?二、同步与异步的概念?三、线程与进程的区别?需求1:多线程执行不同任务需求2:多线程执行相同任务总结一、并发与并行?1、

SpringCloud整合MQ实现消息总线服务方式

《SpringCloud整合MQ实现消息总线服务方式》:本文主要介绍SpringCloud整合MQ实现消息总线服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、背景介绍二、方案实践三、升级版总结一、背景介绍每当修改配置文件内容,如果需要客户端也同步更新,

Linux搭建单机MySQL8.0.26版本的操作方法

《Linux搭建单机MySQL8.0.26版本的操作方法》:本文主要介绍Linux搭建单机MySQL8.0.26版本的操作方法,本文通过图文并茂的形式给大家讲解的非常详细,感兴趣的朋友一起看看吧... 目录概述环境信息数据库服务安装步骤下载前置依赖服务下载方式一:进入官网下载,并上传到宿主机中,适合离线环境

SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程

《SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程》本文详细介绍了如何在虚拟机和宝塔面板中安装RabbitMQ,并使用Java代码实现消息的发送和接收,通过异步通讯,可以优化... 目录一、RabbitMQ安装二、启动RabbitMQ三、javascript编写Java代码1、引入

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在