Spring MVC(async)vs Spring WebFlux

我正在尝试了解Spring WebFlux。 到目前为止我发现的东西都是内核反应,没有Servlet API,每个请求没有线程,HTTP 2,服务器推送,应用程序/流+ json。

但是Spring MVC中的异步调用有什么区别? 我的意思是在Spring MVC中,当你返回Future,DefferedResult等时,你会在一个单独的线程中执行请求处理程序(控制器方法)中的逻辑,因此你也可以从保存线程池资源中获益,以便调度请求。

那么请你强调与此相关的差异? 为什么WebFlux在这里更好?

非常感谢你的时间!

Servlet异步模型在容器线程(1个Servlet请求/线程模型)和应用程序中的请求处理之间引入了异步边界。 处理可以在不同的线程上发生或等待。 最后,您必须以阻塞方式调度回容器线程并进行读/写( InputStreamOutputStream本身就是阻塞API)。

使用该模型,您需要许multithreading来实现并发(因为许multithreading可以被阻塞等待I / O)。 这会花费资源,可能需要权衡,具体取决于您的使用案例。

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

有关该比较的更多信息,这个Servlet与Reactive堆栈的讨论应该是有意义的。