簡體   English   中英

為什么反應式編程應用程序(vert.x)比單線程無鎖,無阻塞的java應用程序更快?

[英]Why Reactive programming application( vert.x) is faster than single thread lock free , no-blocking java application?

我最近使用vert.x(基於java)測試了一個簡單的HTTP服務器我對http服務器的吞吐量和api延遲感到驚訝,它非常快。

http-server的同一段代碼在java應用程序上運行,具有單線程,無鎖和無阻塞。 性能不到vert.x的1/3。

我不明白的是,vert.x優於非反應式Java應用程序的核心技術差異是什么?

統計:

使用Jmeter進行測試。 jmeter和應用程序都在相同的機器上運行,消耗cpu 25-50%,app消耗cpu 20-30%。 所有測試均進行5分鍾。

  1. 帶有1個tomcat工作線程的Spring啟動:

具有1個客戶端線程轟炸請求的Jmeter(整個:每秒3474): 在此輸入圖像描述

同時具有50個客戶端線程轟炸請求的Jmeter(整個:每秒4285): 在此輸入圖像描述

  1. Vert.x(基於java)只有1個垂直(http處理器垂直) - 意味着只有1個處理器線程

具有1個客戶端線程轟炸請求的Jmeter(整個:每秒9382): 在此輸入圖像描述

具有50個客戶端線程的Jmeter同時轟擊請求(整個:20785每秒): 在此輸入圖像描述

這有很多原因。
首先,您將單線程裸Java應用程序與Vertx進行比較,后者實際上是多線程的
第二個是如何使用無鎖數據結構。 無鎖並不一定意味着“在所有條件下都更快”
第三,我認為這是重點,一些最好的紅帽開發人員為Vertx開發做出了貢獻。 例如,您可以檢查源代碼並查看一些非常智能的緩沖區用法。 從第一個鏡頭開始,一個示例項目的表現要超過這樣一個框架,這有點太多了。 如果您對某些替代方案感興趣,請檢查Rapidoid性能,該性能應與Vertx相當。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM