我正在尝试了解 Spring WebFlux。到目前为止我发现的东西在核心都是反应式的,没有Servlet API,每个请求没有线程,HTTP 2,服务器推送,应用程序/流+json。
但是 Spring MVC 中的异步调用有什么区别呢?我的意思是,在 Spring MVC 中,当您返回 Future、DefferedResult 等时,您会在单独的线程中执行请求处理程序(控制器方法)中获得逻辑,因此您也可以从节省用于分派请求的线程池资源中受益。
那么您能强调一下与此相关的差异吗?为什么 WebFlux 在这里更好?
非常感谢您抽出时间!
Servlet 异步模型在容器线程(1 个 Servlet 请求/线程模型)和应用程序中的请求处理之间引入了异步边界。处理可以发生在不同的线程上或等待。最后,您必须分派回容器线程并以阻塞方式读/写(InputStream
and OutputStream
本质上是阻塞 API)。
使用该模型,您需要许多线程来实现并发(因为其中许多线程可能会被阻塞等待 I/O)。这会消耗资源,并且可能是一种权衡,具体取决于您的用例。
使用非阻塞代码,您只需要几个线程即可同时处理大量请求。这是一种不同的并发模型;与任何模型一样,它有利也有弊。
有关该比较的更多信息,请参阅Servlet 与 Reactive 堆栈讨论 https://www.infoq.com/presentations/servlet-reactive-stack应该会引起兴趣。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)