我们分别基于WebMVC和WebFlux创建两个项目:mvc-with-latency和WebFlux-with-latency。
WebMVC和WebFlux项目测试结果图:
WebMVC和WebFlux项目测试结果图.png
上图中:max-thread-200/max-thread-400是mvc-with-latency工程在最大线程数为200、400时的测试结果;
webflux是在默认情况下(即最大线程数是200)的测试结果。
Tomcat默认最大线程数是200;
通过在application.properties中增加:server.tomcat.max-threads=400
设置最大线程数为400。
为了更明显的展示:给出吞吐量和响应时长的对比图
吞吐量对比图.png
吞吐量对比图:在并发4000个用户之后,webflux的吞吐量仍呈线性增长,但同步实现则呈现增长放缓的状态。
响应时长对比图.png响应时长对比图:在并发3000个用户之后,webflux的响应时长仍为105左右,但同步实现的响应时长线性增长。
综上来说,结论就是相对于Servlet多线程的处理方式来说,Spring WebFlux在应对高并发的请求时,借助于异步IO,能够以少量而稳定的线程处理更高吞吐量的请求,尤其是当请求处理过程如果因为业务复杂或IO阻塞等导致处理时长较长时,对比更加显著。
网友评论