当前位置: 首页 > 知识库问答 >
问题:

spring MVC(异步)vs spring WebFlux

仉俊能
2023-03-14

我在试着了解spring·韦弗洛斯。到目前为止,我发现的问题是核心是反应性的,没有Servlet API,没有每个请求的线程,HTTP2,服务器推送,Application/Stream+JSON。

但是在spring MVC中异步调用有什么区别呢?我的意思是,在spring MVC中,当您返回Future、DefferedResult等时,您会得到在一个单独的线程中执行的请求处理程序(controller方法)中的逻辑,因此您也可以从节省线程池资源来调度请求中获益。

所以你能强调一下与此相关的区别吗?为什么WebFlux在这里更好?

非常感谢您的时间!

共有2个答案

胡鸿羲
2023-03-14

Servlet API正在阻塞每个HTTP请求需要1个线程的I/O。spring MVC异步依赖于ServletAPI,它只提供容器线程和请求处理线程之间的异步行为,而不提供端到端的异步行为。

另一方面,spring WebFlux通过使用HTTP套接字并通过套接字一次推送数据块,通过固定数量的线程来实现并发。这种机制被称为事件循环,Node.js流行了这一想法。这种方法是可伸缩的和弹性的。spring 5的spring-WebFlux使用事件循环方法来提供异步行为。

更多内容可从

  • Servlet与Reactive
  • spring boot性能
  • WebFlux与spring Web MVC的比较
慕容渊
2023-03-14

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

使用该模型,您需要许多线程来实现并发(因为其中许多线程可能在等待I/O时被阻塞)。这会耗费资源,而且这可能是一种折衷,这取决于您的用例。

使用非阻塞代码,您只需要几个线程就可以并发处理大量请求。这是一种不同的并发模型;与任何模型一样,它也有好处和权衡。

要了解更多关于这种比较的信息,这个Servlet vs.Reactive stacks的讨论应该很有兴趣。

 类似资料:
  • 本文向大家介绍springmvc处理异步请求的示例,包括了springmvc处理异步请求的示例的使用技巧和注意事项,需要的朋友参考一下 springmvc 3.2开始就支持servlet3.0的异步请求。平常我们请求一个controller一般都是同步的,如果在代码执行中,遇到耗时的业务操作,那servlet容器线程就会被锁死,当有其他请求进来的时候就会受堵了。 springmvc3.2之后支持异

  • 本文向大家介绍springmvc利用jquery.form插件异步上传文件示例,包括了springmvc利用jquery.form插件异步上传文件示例的使用技巧和注意事项,需要的朋友参考一下 需要的下载文件: jQuery.form.js jquery.js commons-fileupload.jar commons-io.jar 示例图片 pom.xml web.xml 解决上传后中文文件名乱

  • 异步操作在线程中执行,与主应用程序线程分开。当应用程序调用方法异步执行操作时,应用程序可以在异步方法执行其任务时继续执行。 示例 下面通过一个例子来理解这个概念。在示例程序中使用IO库接受用户输入。 是一种同步方法。它将阻止执行函数调用之后的所有指令,直到方法完成执行。 等待输入。它停止执行并且在收到用户输入之前不再执行任何操作。 以上示例将产生以下输出 - 在计算中,当某个事件在继续之前等待事件

  • 支持Python异步。包括对Core和ORM使用的支持,使用了异步兼容的方言。 1.4 新版功能. 注解 从SQLAlChemy 1.4.3开始的异步扩展现在可以被认为是 测试级 软件。API细节可能会更改,但是在这一点上,不太可能有重大的向后不兼容更改。 参见 对内核和ORM的异步IO支持 -初始功能发布 异步集成 -示例脚本演示了asyncio扩展中核心和ORM使用的工作示例。 Asyncio

  • 本文向大家介绍SpringMVC环境下实现的Ajax异步请求JSON格式数据,包括了SpringMVC环境下实现的Ajax异步请求JSON格式数据的使用技巧和注意事项,需要的朋友参考一下 一 环境搭建 首先是常规的spring mvc环境搭建,不用多说,需要注意的是,这里需要引入jackson相关jar包,然后在spring配置文件“springmvc-servlet.xml”中添加json解析相

  • 问题内容: 同步和异步AJAX调用有什么区别?何时使用同步以及何时异步? 问题答案: 在最基本的级别上,当您希望调用在后台发生时,您可以使用异步模式,而当您希望代码等待直到调用完成时,则可以使用同步模式。 异步模式是AJAX调用的常用方法,因为通常在事件上附加一个回调函数,以便您可以在服务器端数据就绪时进行响应,而不必等待数据到达。

  • 问题内容: 我该如何做这项工作 我试图从异步之一获取同步功能,我需要它来使用FreeTds异步查询作为同步之一 问题答案: 使用deasync-用C ++编写的模块,它将Node.js事件循环暴露给JavaScript。该模块还公开了一个函数,该函数阻止后续代码,但不阻止整个线程,也不引起繁忙的等待。您可以将函数放入循环中:

  • 我对一个异步函数有点拘泥于此。 我要完成的是创建一个batchProcessing函数(batchGetSubs),它将循环访问一组文件,读取一个ID,然后发出一个API请求,等待一个响应(问题),然后用格式化的数据写入一个新文件。 问题--我尝试了异步和等待,以及推送承诺和尝试使用承诺.所有这些都是为了等待承诺的解决,但没有成功。当前的行为是,在API调用实际返回所有数据之前,我获取Promis