Spring MVC(阻塞同步)和 Spring WebFlux(非阻塞异步)编程模型生活场景类比

3. Spring WebFlux 入门 Spring WebFlux 是 Spring 5 引入的响应式 Web 框架,基于 Reactive Streams 规范,旨在提供非阻塞的、事件驱动的编程模型。点击 “Generate” 生成项目,并下载 zip 文件。将其解压并导入到你的 IDE 中。,你应该能看到 “Hello, Spring WebFlux!在 Spring MVC 中,控制器方法通常返回具体的对象或视图。与之相比,Spring WebFlux 中的控制器方法返回的是。 阅读详情

为了让两种 Web 编程模型——Spring MVC(阻塞同步) 和 Spring WebFlux(非阻塞异步)——更容易理解,我们用生活中最熟悉的场景来类比,让你一看就懂,不再被术语困扰。


🌟 生活化类比:餐厅服务模式

想象你是一家餐厅的老板,顾客是用户的 HTTP 请求,服务员是服务器的线程,菜品是数据请求(如查数据库、调接口)。


🍽️ 模型一:Spring MVC —— “传统点餐模式”

关键词:一个服务员,一个顾客,全程服务,中途不能干别的

📖 场景描述:

你开了一家传统中餐馆,每个服务员只能服务一位顾客。

  • 顾客 A 点了一份“红烧肉”,服务员去厨房下单。
  • 厨房做菜要 10 分钟 → 服务员站在厨房门口干等,啥也不干。
  • 顾客 B 进来想点菜 → 没人接待,因为服务员被 A 占着。
  • 顾客 C、D、E… 陆续进来,但服务员只有 5 个 → 只能让 5 个人排队等。
  • 第 6 个顾客来了?抱歉,满座,不接待了。

⚠️ 如果某道菜特别难做(比如数据库慢查询),服务员就卡死在那里,整条服务线瘫痪。

✅ 优点:
  • 流程清晰,服务员和顾客一对一,容易管理、容易理解。
  • 适合菜品简单、出餐快的餐厅(低并发、简单业务)。
❌ 缺点:
  • 资源浪费严重:服务员 80% 时间在“等”,不是在“服务”。
  • 扩展性差:想多接待顾客?只能多请服务员 → 但请太多,工资(内存)爆炸!
  • 高峰期直接崩:100 人同时来吃饭?你得雇 100 个服务员 → 成本太高,餐厅破产。

💡 对应技术:

  • 服务员 = 线程
  • 等菜 = 阻塞等待数据库/HTTP响应
  • 服务员数量上限 = Tomcat 线程池大小(默认200)
  • 顾客排队 = 请求排队,超时或拒绝服务

🚀 模型二:Spring WebFlux —— “现代自助点餐 + 智能调度系统”

关键词:一个调度员,多人同时下单,谁好了谁先上

📖 场景描述:

你升级成一家高科技餐厅,引入了智能点餐系统:

  • 顾客 A、B、C、D… 100 个人同时进店,每人用平板点菜(发送请求)。
  • 系统自动记录:“A 要红烧肉(10分钟),B 要清蒸鱼(5分钟),C 要凉菜(1分钟)…”
  • 只有一个调度员(事件循环线程),他不亲自跑厨房,只负责:
    • 把订单发给厨房(异步请求)
    • 一发完,立刻转身去服务下一个顾客
    • 不等!不站!不耗时间!
  • 厨房做完菜,自动按铃通知调度员:“A 的红烧肉好了!”
  • 调度员立刻把菜端给 A,然后继续处理“B 的鱼好了”、“C 的凉菜好了”…
  • 100 个顾客,1个调度员,全部搞定!

✅ 即使某道菜慢(数据库卡顿),调度员也不会停,他照样在处理其他人的需求。

✅ 优点:
  • 一个调度员,服务1000人,资源极省。
  • 不排队、不等待、不卡顿,响应快、吞吐高。
  • 高峰期照样稳,系统不崩,只是“出餐速度”不变,但“接待能力”暴涨。
❌ 缺点:
  • 调度员不能自己下厨(不能做CPU密集型任务),否则会卡住。
  • 如果顾客要求“我要边等边聊天”(同步阻塞操作),系统就乱了。
  • 初次使用有点难懂,要学“点单-通知-取餐”的流程(响应式编程)。

💡 对应技术:

  • 调度员 = Netty 的 Event Loop 线程(2~8个)
  • 平板点单 = WebClient / R2DBC 发起异步请求
  • 厨房按铃 = 回调 / 响应式流(Mono/Flux)通知完成
  • 1000人同吃 = 10000+ 并发连接,资源消耗几乎不变

🧠 一句话总结:形象记忆口诀

模型类比记忆口诀
Spring MVC传统餐厅,服务员一对一服务,等菜时傻站着👉 “一人一桌,等菜不动”
Spring WebFlux智能餐厅,一个调度员管全场,发单就走,有菜就端👉 “发单就走,有菜就端”

🎯 现实生活中的延伸类比

场景MVC 类比WebFlux 类比
打电话查信息你打电话给银行,对方说“你等着,我查一下”,你一直握着电话不挂,直到他说完 → 线程被占你发短信:“帮我查下余额”,然后去做饭、看电影,等他短信回复你 → 非阻塞
快递送货快递员一次只送一个包裹,送到你家前不能去别家 → 线程阻塞快递公司用系统调度,一个司机同时接10单,送完A就去B,不等你开门 → 异步并发
医院挂号挂号窗口只服务一人,前面的人缴费慢,后面全堵住 → MVC电子挂号系统,所有人同时提交,系统后台排队处理,轮到你自动短信通知 → WebFlux

✅ 最终建议:选哪个?看你的“餐厅规模”

你是哪种老板?推荐模式
开一家社区小馆,每天最多50个客人,菜品简单👉 传统模式(MVC) —— 稳、省心、好管理
开连锁餐厅,全国1000家店,每天百万订单,还要对接外卖平台、支付、库存👉 智能调度(WebFlux) —— 省人、省电、抗压强
你想做“技术先锋”,未来要支撑千万级用户👉 学 WebFlux,但别急着全换 —— 先在高并发模块试点

💬 结语:不是谁取代谁,而是谁更适合你

Spring MVC 是你熟悉的“老伙计”,它不会消失,也不会过时。
Spring WebFlux 是你的“新武器”,它不是为了炫技,而是为了在高并发、高负载的世界里,用最少的资源,做最多的事。

就像你不会用马车去跑马拉松,
但你也不会用火箭去送快递。

选对工具,才能事半功倍。

如果你现在正在开发一个每天百万请求的 API 网关 ——
别犹豫,选 WebFlux。
如果你在写一个内部考勤系统 ——
安心用 MVC,别折腾。

技术的价值,不在于“新”,而在于“恰到好处”。

深入探索 Spring WebFlux:响应式编程与非阻塞架构的实践指南 在微服务和高并发应用日益普及的今天,传统的阻塞式编程模型已逐渐暴露出性能瓶颈与资源浪费的问题。为了解决这一挑战,响应式编程(Reactive Programming)逐渐走进了开发者的视野。Spring 5 引入了,这是一套基于响应式编程模型和非阻塞 I/O 的全新框架,能够帮助开发者构建高效、可伸缩的 Web 应用和微服务系统。 阅读详情

相关推荐

什么是WebFlux 以及WebFlux 的应用场景,WebFlux【Spring Reactive Web】

文章目录什么是WebFlux 已经WebFlux 的应用场景,WebFlux【Spring Reactive Web】1、什么是WebFlux2、WebFlux 的几个特征1、异步非阻塞2、响应式(reactive)函数编程3、不再拘束于Servlet容器3、WebFlux 到底有哪些优势,他是否提升了性能4、WebFlux 应用场景5、WebFlux 与 SpringMVC6、WebFlux ...

简简单单Onlinezuozuo 1万+

WebFlux 详解

今天我们开始来学习下 WebFlux,为什么突然要学这个东西? 因为我之前是想学习 Spring Cloud Gateway 来着,然后发现它是基于 Spring5.0+SpringBoot2.0+WebFlux等技术开发的。所以学之前才要来简单了解下 WebFlux 技术。 然后要学习 WebFlux 时我发现又需要 Java 8 中的函数式编程、Stream 流等技术作为前置知识。环环相扣啊,套娃一样。 所以前面还有两篇学习的文章:来系统学习下 lambda 表达式吧和来一起学习下 Java 8 的 S

zhang33565417的博客 5万+

pytorch超详细安装教程,Anaconda、PyTorch和PyCharm整套安装流程

本文介绍基于Anaconda环境以及与PyCharm结合,安装PyTorch深度学习框架。

Bluebro的博客 19万+

Spring-WebFlux使用,一文带你从0开始学明白Spring-WebFlux,学明白响应式编程

传统的基于Servlet的Web框架,如Spring MVC,在本质上都是阻塞和多线程的,每个连接都会使用一个线程。在请求处理的时候,会在线程池中拉取一个工作者( worker )线程来对请求进行处理。同时,请求线程是阻塞的,直到工作者线程提示它已经完成为止。在Spring5中,引入了一个新的异步、非阻塞的WEB模块,就是Spring-WebFlux。该框架在很大程度上是基于Reactor项目的,能够解决Web应用和API中对更好的可扩展性的需求。响应式编程详解,带你熟悉Reactor响应式编程。

秃了也弱了 2万+

NSGA-Ⅱ算法:从原理到实战,解锁多目标优化难题

本文深入解析NSGA-Ⅱ算法在多目标优化中的应用,从原理到实战全面覆盖。通过快速非支配排序、精英策略和拥挤度比较三大创新,NSGA-Ⅱ有效解决了传统算法的效率与多样性问题。结合工业案例展示其在注塑工艺优化中的显著效果,为工程师提供实用解决方案。

weixin_29207149的博客 364

电影票购票小程序搭建(源码部署)

答:为用户提供便捷的购票方式,包括授权登录、个性化推荐、在线选座、订单管理等功能,同时在界面设计上注重用户友好性,简化用户的购票流程。答:通过展示电影院的优惠活动和票价信息,同时提供电影推荐功能,根据用户的历史购票记录和电影评分推荐个性化的电影列表,吸引用户购票。编写页面逻辑代码:使用JavaScript编写小程序页面的逻辑代码,实现电影列表的获取、电影详情的展示、座位选择的逻辑等。设计小程序界面:使用WXML和WXSS编写小程序的界面代码,实现电影列表的展示、电影详情的样式、座位选择页面的布局等。

2301_79072569的博客 2068

重学SpringBoot3-Spring WebFlux简介

随着微服务架构的流行和对高并发、低延迟系统需求的增加,响应式编程逐渐成为现代应用开发的主流方式之一。Spring Boot 3 引入了对响应式编程的强大支持,其中 Spring WebFlux 是一个重要的模块。本文将介绍 Spring WebFlux 的概念、特点以及它在实际应用中的场景和优势。

CoderJia的学习之路 5069

2025 高效抓取雪球社区数据:自动化导出Excel与PDF全攻略

本文详细介绍了2025年高效自动化抓取雪球社区数据的完整方案。通过Python脚本,用户可自动抓取帖子列表数据并导出为结构化的Excel表格,同时批量将帖子内容保存为PDF文档,并支持合并与添加书签,极大提升投资研究和信息整理的效率。

weixin_29034963的博客 690

Spring WebFlux:响应式编程

WebFlux提供了一个非阻塞、异步的Web框架,允许开发者构建高性能、可伸缩的 Web 应用程序,特别适合处理大量并发连接,如在微服务架构和云环境中。 WebFlux是Spring Framework 5引入的一个重要组件,它代表了Spring对于响应式编程(Reactive Programming)的支持。

yuanchun的知识整理 6511

微信小程序 - 详细实现可移动悬浮按钮,全屏悬浮元素图标可拖动拖拽并自动吸附边缘,微信小程序实现悬浮球吸附边缘+计算靠边靠拢效果(详细代码,拖拽中途放手,靠左就自动跑到屏幕左侧,反之靠右跑到屏幕右侧)

微信小程序,vue2,vue3,微信小程序悬浮功能小按钮,自动吸附边缘效果,微信小程序之可拖动悬浮按钮的实现,如何实现靠近边缘自动吸住功能,小程序右下角的悬浮效果,实现可拖动悬浮图标,自动向两边靠拢,悬浮按钮的实现,微信小程序悬浮球效果,微信小程序(可拖动悬浮按钮)当靠近屏幕边缘时会磁吸靠近,如何实现全局悬浮按钮,悬浮球判断吸附在左右,全屏悬浮能拖着走,小程序怎么做悬浮图标靠近左右两侧能吸附住,悬浮菜单按钮,悬浮球可拖拽,全局悬浮球,全局悬浮框,实现悬浮按钮可拖动,自动吸附边缘效果,若按钮此时位于页面中间偏

🏆 前端领域优质创作者 1万+

巡检类机器人电池容量计算方法论(原理+算法+真实案例)

摘要:本文系统阐述了巡检机器人电池容量的计算方法,重点解析了;能量平衡;核心原理和三种主流算法。通过光伏电站履带式巡检机器人的真实案例,详细演示了从工况拆解、功耗采集到容量计算的完整流程。文章指出:室内轻载场景可采用静态平均功耗法,户外常规工况推荐动态负载积分法,而复杂环境需采用融合估算算法。特别强调需考虑温度修正(冬季容量衰减20%)、冗余系数(1.2-1.5)和放电深度(磷酸铁锂DoD取80%)等关键参数。

start_up_go的博客 241

异步编程 - 11 Spring WebFlux的异步非阻塞处理

我们这里主要探讨Spring框架5.0中引入的新的WebFlux技术栈,并介绍其存在的价值与意义、并发模型与适用场景、如何基于WebFlux实现异步编程,以及其内部的实现原理。Spring框架中包含的原始Web框架Spring Web MVC是专为Servlet API和Servlet容器构建的。

小工匠 1万+

【医学图像处理】X-ray成像之X射线的产生

【医学图像处理】X-ray成像之X射线的产生 概述 电流流过钨丝,并将其加热。 随着加热,增加的能量使电子能够通过热电子发射从灯丝中释放出来。 电子被吸引到带正电的阳极,并以由管电位(电压)确定的最大能量撞击钨靶。 当电子轰击目标时,它们通过轫致辐射和特有的相互作用将能量转换为热量(99%)和X射线光子(1%)。 X射线光子以一束能量(X射线光谱)从光束中释放出来,构成X射线图像形成的基础。 设备 阴极 灯丝 用细的(0.2毫米)钨丝制成,因为钨: 原子序数高(A 184,Z 74) 是良好的热

ZhangPY的专栏 2351

Spring WebFlux异步非阻塞式编程

Spring MVC 构建于 Servlet API 之上,使用的是同步阻塞式 I/O 模型,什么是同步阻塞式 I/O 模型呢?就是说,每一个请求对应一个线程去处理。 了解了 Spring MVC 之后,再来说说 Spring WebFlux: 上图左边,官方给出的定义如下: Spring WebFlux is a non-blocking web framework built from the ground up to take advantage of multi-core, next-gen

不经意的博客 3180

SpringBoot整合LangChain4j实现RAG检索实战详解

本文介绍了使用LangChain4j框架在Java生态中构建RAG(检索增强生成)应用的最佳实践。作为最接近Python LangChain的Java实现,LangChain4j提供了文档解析、向量化存储到检索增强的全套组件,并与SpringBoot深度集成。文章通过电商智能客服场景,详细演示了从零搭建RAG系统的完整流程:包括使用PostgreSQL+pgvector作为生产级向量数据库、文档加载与向量化处理、声明式AI服务实现以及查询压缩、结果重排等进阶优化技巧。同时对比了内存模式与生产级向量库的差异,

分享AI、区块链技术及应用,未来已来 432

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Spring WebFlux和Spring MVC的对比

本文介绍Spring WebFlux和Spring MVC的区别。Webflux:是异步非阻塞的(IO多路复用),基于Netty。适合网络转发类的应用,比如:网关。MVC:是同步阻塞的,基于Servlet。适合阻塞性的业务应用,比如:读写数据库等普通业务。Webflux和MVC功能性Spring MVC 和 WebFlux 可以共存。

IT利刃出鞘的博客 1114

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Spring MVC 与 Spring WebFlux框架对比分析

对比分析两个主流spring模块。对于高并发和低延迟需求,Spring WebFlux 更具优势,而对于大多数传统 Web 应用,Spring MVC 足够满足需求

fengnian18的博客 1483

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

License 集成 Spring Gateway:解决 WebFlux 非阻塞与 Spring MVC Servlet 阻塞兼容问题

License 集成 Spring Gateway:解决 WebFlux 非阻塞与 Spring MVC Servlet 阻塞兼容问题 在分布式系统中,License 授权验证是保障系统安全性的重要环节。当需要在 Spring Gateway 网关层拦截登录请求进行 License 验证时,常会遇到一个关键问题:Spring Gateway 基于 WebFlux 非阻塞架构,而传统 License 验证逻辑多基于 Spring MVC Servlet 阻塞模型开发,两者在线程模型、请求处理流程上存在本质差异

“种一棵树最好的时间是十年前,其次就是现在。” 1066

SpringBoot2.1(10)WebFlux优秀的新一代异步非阻塞Web框架

Spring5以后,新增了Webflux,异步非阻塞Web框架。 在SpringBoot第三篇的时候,简单介绍过WebFlux。 本篇,将从更细的粒度上,更全面的介绍下WebFlux。 一、什么是WebFlux WebFlux是脱离了传统阻塞式Servlet框架,所以,它不同于Spring MVC。 WebFlux是 Spring 5 的一个新模块。包含了响应式 HTTP、服...

周栋的专栏 8692

java处理异步非阻塞请求_Spring WebFlux 的异步非阻塞处理

前言随着 Web Servlet 技术栈的不断发展实现了异步处理与非阻塞 IO,但是其异步是不彻底的,因为受制于 Servlet 规范本身,比如其规范是同步的(Filter,Servlet)或阻塞(getParameter,getPart)。所以新的使用少量线程和较少的硬件资源来处理并发的非阻塞 Web 技术栈应运而生- WebFlux,其是与 Servlet 技术栈并行存在的一种新的技术,其基于...

weixin_34805367的博客 1032

Spring webflux--响应式、非阻塞、事件驱型web框架

一、基本概念---阻塞(Blocking I/O)/非阻塞(Non-blocking I/O),同步(Synchronous I/O)/异步(Asynchronous I/O): 在进行网络编程时,我们常常见到同步(Synchronous I/O)/异步(Asynchronous I/O),阻塞(Blocking I/O)/非阻塞(Non-blocking I/O)四种调用方式,下面将这

qiangcuo6087的博客 1万+

步入响应式编程篇(三)之spring webFlux与R2DBC

前面介绍响应式编程主要用到基于Stream API的Reactor API的方式,但如今业务操作需结合springboot,所以spring webFlux使用的更多,它是类似于spring mvc的web框架,不像springmvc的阻塞操作,一个请求通常对应一个线程,而spring webFlux响应式编程,天然支持异步+非阻塞+信号驱动;而且即使web框架用到响应式编程,但瓶颈仍然可能会出现在与关系型数据库的交互,遂引入了R2DBC等响应式方式与DB交互;

Deligent_lvan的博客 1565

WebFlux基本介绍以及应用场景【Spring Reactive Web】

一、原理 内存溢出(Out of memory):系统会给每个APP分配内存也就是Heap size值,当APP所需要的内存大于了系统分配的内存,就会造成内存溢出;通俗点就是10L桶只能装10L水,但是你却用来装11L的水,那就有1L的水就会溢出 内存泄漏(Memory leak):当一个对象不在使用了,本应该被垃圾回收器(JVM)回收,但是这个对象由于被其他正在使用的对象所持有,造成无法被回收的...

weixin_41805792的博客 6732

Spring Boot 中 Spring Web (MVC) 与 Spring WebFlux 对比说明文档

以下是文章摘要: Spring Web MVC与WebFlux深度对比指南(2025版) 本文系统对比了Spring生态中两种Web框架的核心差异。Spring MVC基于Servlet API采用同步阻塞模型,适合低并发、CPU密集型场景;WebFlux基于响应式流实现非阻塞异步,擅长高并发I/O密集型任务。性能测试显示WebFlux在千级并发下吞吐量可达MVC的3-4倍,内存消耗降低50%。文档包含两大核心对比维度:线程模型(线程池vs事件循环)、编程范式(命令式vs响应式),并附有带中文注释的代码示例

python15397的博客 1185

响应式编程实践:Spring Boot WebFlux构建高性能非阻塞服务

响应式编程作为一种异步、非阻塞的编程范式,能够有效地解决这些问题,提高系统的吞吐量和响应能力。Spring Boot WebFlux 是 Spring 框架提供的用于构建响应式 Web 应用的模块,它基于 Reactor 库,支持多种协议,如 HTTP、WebSocket 等,为开发者提供了强大的工具来构建高性能的非阻塞服务。本文将详细介绍如何使用 Spring Boot WebFlux 进行响应式编程实践,构建高性能的非阻塞服务。

梵心白莲的博客 1901

Spring webflux

WebFlux的确通过线程池和多路复用的方式来处理请求,避免了传统每个请求都创建新线程的做法。虽然维护的线程数量是固定的,但由于采用了非阻塞和异步事件驱动的机制,线程并不会因为等待 I/O 而被阻塞,从而能够同时处理多个请求。这样一来,即使线程数量有限,系统仍然能够高效处理高并发请求,保持良好的响应时间。在理解 WebFlux 时,最核心的点是事件驱动模型和I/O 多路复用,以及它如何通过少量线程处理大量并发请求。

qq_55272229的博客 1501
上一篇: Spring Boot 中 Spring Web (MVC) 与 Spring WebFlux 对比说明文档
下一篇: JDK 21 虚拟线程(Virtual Threads)对 Spring MVC 与 Spring WebFlux 的影响深度说明文档
龙茶清欢
博客等级 码龄7年 3720粉丝 375原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值