当前位置: 首页 > 知识库问答 >
问题:

为什么反应性编程应用程序(vert. x)比单线程锁更快,无阻塞的java应用程序?

冯亮
2023-03-14

我最近使用vert. x(基于java)测试了一个简单的HTTP服务器。我对超文本传输协议服务器的吞吐量和api延迟感到惊讶,它非常快。

超文本传输协议-server的同一段代码在java应用程序上以单线程运行,无锁且无阻塞。性能不到vert. x 1的三分之一。

我不明白的是,vert. x优于非反应性java应用程序的核心技术区别是什么?

统计数据:

测试是使用Jmeter完成的。jmetm和应用程序都在同一台机器上运行——jmetm消耗cpu 25-50%,应用消耗cpu 20-30%。所有的测试都运行了5分钟。

  1. 带有1个tomcat工作线程的Spring引导:

共有1个答案

邬朗
2023-03-14

原因有很多
第一个是比较单线程裸Java应用程序和Vertx,后者实际上是多线程的
第二个问题是如何使用无锁数据结构。无锁并不一定意味着“在所有情况下都更快”
第三,我认为这是主要的一点,一些最好的红帽开发者为Vertx开发做出了贡献。例如,您可以查看源代码并了解缓冲区的一些非常巧妙的用法。对于一个示例项目来说,从一开始就超越这样一个框架的期望有点太高了。如果你对一些替代品感兴趣,检查快速性能,这应该与Vertx相当。

 类似资料:
  • 我试图使用neo4j中的命令从CSV文件中导入大约500,000行数据。 下面是我正在使用的代码: 期望的行为:第一次出现以另一个艺术家为特征的人会创建关系,并且应该将关系的属性设置为1。对于随后的每一次事件,强度属性将增加1。因此,经常以艺术家B为特色的艺术家A应该具有类似的关系 关系是方向性的,在这种情况下,方向性很重要(A以B为特征不同于B以A为特征)。 在确定问题时,是否有其他有用的信息?

  • 问题内容: 我在维护的Swing应用程序中遇到了僵局,尽管我有一个可行的解决方法,但我不确定我是否了解自己在做什么,还没有隐藏可能弹出的竞争条件稍后再试。 线程跟踪显示死锁发生在两个线程AWT-EventQueue-0和AWT- EventQueue-1之间。我的第一个问题是,如果其中一个是臭名昭著的事件调度线程。这两个线程在堆栈跟踪的底部都有以下内容: 我认为问题的根源在于应用程序类将域数据与图

  • 当我创建一个简单的非多线程JavaFX应用程序并启动它时,该应用程序会创建一些线程(JavaFXApplicationThread、JavaFXLauncher等)。这些线程中的大多数都已命名,但在我的所有JavaFX应用程序中都有一个未命名的线程(“线程-1”或“线程-2”)。我绝对不会创建自己的线程,因为我尝试启动Hello World JavaFX应用程序(由IDEA生成),其中也包含“线程

  • 问题内容: 我在处理pyGTK应用程序时遇到一些问题。我给线程一些时间来完成其任务,如果有问题,我还是继续继续,只是警告用户。但是,一旦我继续,该线程就会停止,直到调用gtk.main_quit为止。这让我感到困惑。 相关代码: .................................... 问题答案: 首先,不要继承,使用。 其次,很可能导致您明显的阻塞的原因是它采用了一个默认值为的参

  • 我正在尝试创建一个消费者-生产者程序,其中消费者线程生产者的数字填充数组,消费者线程打印填充数组的数字。目前,我可以填充数组并在使用者/生产者线程之间来回传递数据,但我希望生产者创建数字的速度比使用者处理数字的速度快。 此刻,每1秒产生一个数字,每3消耗一个数字。在消耗一个之前应该产生两个数字,但是我的生产者线程正在等待,直到它产生的数字被消耗。 我试过移动互斥锁和解锁,还有信号,但我没有得到它的

  • 问题内容: 该单页应用(SPA)已经到了我们。随之而来的还有很多新功能,例如路由,客户端页面生命周期,MVC模式,MVVM模式,MV *模式等等。还有一些Javascript模式,例如AMD模式,Singleton,Facade,.. 还开发了许多SPA框架和库。我们可以在互联网上找到它的一些内容。它们是AngularJs,Reactjs,BackboneJs,DurandalJs 等等,以及许多