Dmi*_*ich 43 java spring spring-mvc spring-webflux
我正在尝试了解Spring WebFlux.到目前为止我发现的东西都是内核反应,没有Servlet API,每个请求没有线程,HTTP 2,服务器推送,应用程序/流+ json.
但是Spring MVC中的异步调用有什么区别?我的意思是在Spring MVC中,当你返回Future,DefferedResult等时,你会在一个单独的线程中执行请求处理程序(控制器方法)中的逻辑,因此你也可以从保存线程池资源以便调度请求中受益.
那么请你强调与此相关的差异吗?为什么WebFlux在这里更好?
非常感谢你的时间!
Bri*_*zel 40
Servlet异步模型在容器线程(1 Servlet请求/线程模型)和应用程序中的请求处理之间引入了异步边界.处理可以在不同的线程上发生或等待.最后,您必须以阻塞方式调度回容器线程并进行读/写(InputStream并且OutputStream本质上是阻止API).
使用该模型,您需要许多线程来实现并发(因为许多线程可以被阻塞等待I/O).这会花费资源,可能需要权衡,具体取决于您的使用案例.
使用非阻塞代码,您只需要几个线程来同时处理大量请求.这是一个不同的并发模型; 像任何模型一样,它带来了好处和权衡.
有关该比较的更多信息,这个Servlet与Reactive堆栈的讨论应该是有意义的.
Servlet API 正在阻塞 I/O,每个 HTTP 请求需要 1 个线程。Spring MVC 异步依赖于 Servlet API,它只提供容器线程和请求处理线程之间的异步行为,而不是端到端的。
另一方面,Spring WebFlux 通过使用 HTTP 套接字并通过套接字一次推送数据块,通过固定数量的线程实现并发。这种机制被称为事件循环,这是Node.js流行的一个想法。这种方法具有可扩展性和弹性。Spring 5 的 spring-webflux 使用事件循环方法来提供异步行为。
更多内容可以从
| 归档时间: |
|
| 查看次数: |
13296 次 |
| 最近记录: |