![](/img/trans.png)
[英]Jetty Async not working as anticipated, experiencing worse performance than sync
[英]Async API giving worse performance
有趣的是,我認為有255個並發用戶,異步API會有更好的性能。 這是我的Spring服務器中的兩個端點:
@RequestMapping("/async")
public CompletableFuture<String> g(){
CompletableFuture<String> f = new CompletableFuture<>();
f.runAsync(() -> {
try {
Thread.sleep(500);
f.complete("Finished");
} catch (InterruptedException e) {
e.printStackTrace();
}
});
return f;
}
@RequestMapping("/sync")
public String h() throws InterruptedException {
Thread.sleep(500);
return "Finished";
}
在/async
,它在另一個線程上運行。 我正在使用Siege
進行負載測試,如下所示:
siege http://localhost:8080/sync --concurrent=255 --time=10S > /dev/null
對於async
端點,我的交易次數為27 hits
對於sync
端點,我獲得了1531 hits
的交易數
那為什么呢? 為什么異步端點不能處理更多事務?
因為異步端點正在使用共享的(較小的ForkJoinPool.commonPool()
)線程池執行睡眠,而同步端點則使用應用程序服務器的較大線程池。 由於公共池是如此之小,因此您可能一次運行4至8個操作(好吧,如果您叫sleeping一個操作),而其他人則等待輪到他們進入池中。 您可以將更大的池與CompletableFuture.runAsync(Runnable, Executor)
(您還將方法稱為錯誤,這是一個返回CompletableFuture
的靜態方法)。
異步並不是一種神奇的“使事情更快”的技術。 您的示例存在缺陷,因為所有請求都需要500毫秒,而您只是在異步請求中增加了開銷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.