abh*_*bhi 6 java multithreading http reactive-programming vert.x
我最近使用 vert.x(基于 java)测试了一个简单的 HTTP 服务器,我对 http 服务器的吞吐量和 api 延迟感到惊讶,它非常快。
http-server 的同一段代码在单线程、无锁和非阻塞的 java 应用程序上运行。性能不到 vert.x one 的 1/3。
我不明白的是,vert.x 优于非响应式 Java 应用程序的核心技术差异是什么?
统计:
测试是使用 Jmeter 完成的。jmeter 和应用程序都在同一台机器上运行——jmeter 消耗 cpu 25-50%,应用程序消耗 cpu 20-30%。所有的测试都运行了 5 分钟。
带有 1 个客户端线程轰炸请求的 Jmeter(每秒:3474 个):

Jmeter 并发 50 个客户端线程轰击请求(每秒 4285 次):

这有很多原因。
第一个是将单线程裸 Java 应用程序与 Vertx 进行比较,后者实际上是多线程的。
第二个是如何使用无锁数据结构。无锁并不一定意味着“在所有条件下都更快”。
第三,我认为这是重点,一些最好的红帽开发人员为 Vertx 开发做出了贡献。例如,您可以检查源代码并查看缓冲区的一些非常巧妙的用法。从一开始就对示例项目的性能超过这样的框架抱有过高的期望。如果您对某些替代方案感兴趣,请查看Rapidoid性能,它应该与 Vertx 相当。