一尘不染

Spring MVC(异步)vs Spring WebFlux

java

我想了解Spring WebFlux。到目前为止,我发现的内容在核心是反应性的,没有Servlet API,没有每个请求的线程,HTTP
2,服务器推送,application / stream + json。

但是Spring MVC中异步调用之间有什么区别?我的意思是在Spring
MVC中,当您返回Future,DefferedResult等时,您会在单独的线程中执行的请求处理程序(控制器方法)中获得逻辑,因此您也可以节省线程池资源以分配请求。

因此,您能否强调与此相关的区别?为什么WebFlux在这里更好?

非常感谢您的宝贵时间!


阅读 484

收藏
2020-12-03

共1个答案

一尘不染

Servlet异步模型在容器线程(1个Servlet请求/线程模型)和应用程序中的请求处理之间引入了异步边界。处理可以在其他线程上进行,也可以等待。最后,您必须分派回容器线程并以阻塞方式进行读取/写入(InputStream并且OutputStream本质上是阻塞API)。

使用该模型,您需要许多线程来实现并发(因为其中许多可以等待I / O而被阻塞)。这会花费资源,并且可能会有所取舍,具体取决于您的用例。

使用非阻塞代码,您只需要几个线程即可并发处理大量请求。这是一个不同的并发模型。像任何模型一样,它也会带来好处和折衷。

有关该比较的更多信息,应该关注Servlet与响应式堆栈

2020-12-03