进程、线程、多线程、异步

1) 进程 vs 线程

  • 进程:资源分配的最小单位(应用实例)。
  • 线程:CPU 调度的最小单位(代码真正跑在这里)。

以你项目里"采购入库点击生成付款单"为例:

  • 至少涉及多个进程:浏览器进程、Java 服务进程、数据库进程。
  • 后端这边是在同一个 Java 服务进程内,由一个请求线程串行执行。
  • @Transactional 保证的是当前请求这段数据库操作的事务一致性,不是"整个系统只有一个进程"。

可理解为:

点一次按钮 = 发起一次 HTTP 请求 = 后端进程从线程池拿一个线程跑完整链路。

2) 后端Java 服务进程

后端流程通常是:

Controller -> Service -> Mapper -> DB

  • 请求进来后,Tomcat 从线程池分配一个工作线程处理。
  • 默认同步调用下,这条链路通常都在同一个线程里跑完。
  • 不需要你手动创建线程,容器已管理好。

3)Spring MVC + MyBatis 和 Tomcat

  • 在 Spring MVC(Servlet 模型)+ MyBatis 的常规同步请求里,
  • 每个 HTTP 请求会由 Servlet 容器(如 Tomcat)线程池 分配一个工作线程处理,
  • 该线程通常串行执行 Controller -> Service -> Mapper -> DB,
  • 所以是"单请求单线程(服务端处理阶段)"的默认模型。

补两点小细节(避免理解偏差):

  • "单请求单线程"是指你应用代码的处理链路默认在同一线程;
    JDBC 驱动和数据库内部当然还有它们自己的线程机制。
  • 只有你显式引入异步(如 @Async、线程池、MQ、WebFlux)才会打破这个默认模型。

4) 多线程的作用

  • 异步:不阻塞接口
  • 并行提速:多个远程调用并发执行
  • 批处理拆分:大任务分片并行
  • 后台任务:日志、报表、通知、导出
  • 解耦削峰:配合消息队列,降低主流程压力
  • 提升吞吐:I/O 密集场景下让线程在等待期间不浪费 CPU

5) 异步常见实现(Spring 里)

  • 轻量:@EnableAsync + @Async + 线程池配置
  • 需要结果:CompletableFuture
  • 高可靠/解耦:MQ(RabbitMQ/Kafka/RocketMQ)
  • 注意:尽量不要手写 new Thread(),优先线程池托管

6) Spring MVC 里的 MVC 是什么

  • M(Model):数据和业务对象(实体、DTO、Service层业务数据)
  • V(View):视图展示(模板页/JSP/前端页面)
  • C(Controller):请求入口与调度(@RestController/@Controller)

你这个前后端分离项目里,后端大多返回 JSON,V 主要在前端(Vue)。

相关推荐
weixin_440730503 分钟前
内置函数、json文本、pickle二进制
开发语言·python·json
殷色玫瑰11 分钟前
C++ string类详解:常用接口、字符串操作与模拟实现
java·linux·c语言·开发语言·数据结构·c++
李游Leo14 分钟前
HarmonyOS 7 + Spatial Recon Kit-C++:3DGS 高斯参数的非有限值隔离与可渲染性门禁【鸿蒙心迹】
开发语言·c++·3d·harmonyos
CHEEVEN_QY18 分钟前
新能源汽车电池托盘FSW量产的工艺稳定性控制
java·前端·汽车
惊讶的猫27 分钟前
MCP-server
java
ZealSinger33 分钟前
Boot4升级PostConstruct不跑了
java·spring boot·spring·升级迁移
Code_Solitude1 小时前
C语言:关于二维数组的作业总结
java·c语言·前端
Wang's Blog1 小时前
Java 项目实战: 外卖平台优化-Nginx六种负载均衡策略对比与选型
java·nginx·负载均衡
时间的拾荒人1 小时前
Qt 文件操作详解:从基础类到读写实战
开发语言·qt·面试
Wang's Blog1 小时前
Java 项目实战: 外卖平台优化-YApi接口管理平台与文档导入导出
java·开发语言·yapi