响应式编程

本文,我们来谈谈响应式编程。

什么是响应式编程?

响应式编程是一种编写异步、非阻塞、基于事件驱动 的应用程序的编码模式

响应式编程旨在提高应用程序的性能和可伸缩性,以应对高并发和高负载的场景

在传统的请求响应模型中,每个客户端请求会分配一个线程,这些线程会一直等待直到请求完成,这可能导致资源的浪费和性能瓶颈。响应式编程使用异步非阻塞的方式,通过订阅和处理事件流来处理请求。

什么是 WebFlux

Spring Boot 中采用的是响应式编程模型为 Spring WebFlux

WebFlux 是一个响应式的 Web 框架。WebFlex 可以在资源有限的情况下提高系统的吞吐量和伸缩性(不是提高性能)。

比较 MVC 和 WebFlux

Spring MVC 采用命令编程的方式,代码被一句句执行,方便开发者理解与调试代码。 WebFlux 则是基于异步响应式编程。

它们在工作方式上的区别:

MVC 工作方式

MVC 的工作流程是:主线程接收到请求 -> 准备数据 -> 返回数据

整个工作流程是单线程阻塞,用户会感觉等待时间长。因为在结果处理之后才返回数据给浏览器。如果请求很多,则吞吐量跟不上去。

WebFlux 工作方式

WebFlux 的工作流程是:主线程接收到请求 -> 立即返回数据和函数的组合(Mono 或 Flux,不是结果) -> 开启一个新 Work 线程去做实际的数据准备工作,进行真正的业务操作 -> Work 线程完成工作 -> 返回给用户真实的数据(结果)

这种方式给人的感觉就是响应时间很短,因为返回的是不变的常数,它不随着用户数量的增加而变化。

其他区别对比

对比项 Spring MVC Spring WebFlux
地址(路由)映射 @Controller@RequestMapping 等标准的 Spring MVC 注解 1. Router Functions,提供一套函数式风格的 API,用于创建 RouterHandlerFilter 2. @Controller@RequestMapping 等标准的 Spring MVC
数据流 Serlet API Reactive Streams:一种支持背压的异步数据流处理标准,主流实现有 RxJavaReactorSpring WebFlux 默认集成的是 Reactor
容器 TomcatJettyUndertow NettyTomcatJettyUndertow
I/O 模式 同步阻塞的 I/O 模式 异步非阻塞的 I/O 模式
吞吐性能
业务处理能力 一样 一样
支持数据库 NoSQLSQL 支持 noSQL,不支持 MySQL 等关系型数据库
请求和响应 HttpServletRequestHttpServeletResponse ServerRequestServerResponse

Spring WebFlux 支持 noSQL,不支持 MySQL 等关系型数据库。这有点尴尬😅

参考

  • 《Spring Boot 实战派》
相关推荐
martinzh几秒前
NL2SQL解决了?别闹了!大模型让你和数据库聊天背后的真相
后端
LYFlied2 分钟前
Vue Vapor模式与AI时代前端发展的思考:虚拟DOM与框架的未来
前端·vue.js·人工智能·前端框架
未来影子2 分钟前
Java领域构建Agent新杀入一匹黑马(agentscope-java)
java·开发语言·python
靓仔建2 分钟前
在asp.net web应用程序,老是访问同一个Handler1.ashx
后端·asp.net·一般处理程序
江公望4 分钟前
VUE3 动态Prop 10分钟讲清楚
前端·javascript·vue.js
不会写DN4 分钟前
JavaScript call、apply、bind 方法解析
开发语言·前端·javascript·node.js
goxingman6 分钟前
实体类上关于时间字符串和时间字段转换涉及注解分析
java·开发语言
QK芒果小洛15 分钟前
Springboot 接口校验数组中的对象的方式
java·spring boot·后端
AAA简单玩转程序设计17 分钟前
Java Map遍历的“优雅”合集
java·前端
timeweaver18 分钟前
React Server Components 再曝高危漏洞:拒绝服务与源码泄露接踵而至
前端·安全