当前位置:首页 > 每日看点 > 正文内容

springboot每个web请求是一个线程吗?

卡卷网1年前 (2024-12-05)每日看点191

spring boot 每个请求一个线程?这个误会大了

乍一看,Spring Boot 确实有点像是“每个请求一个线程”。毕竟,Tomcat(默认内嵌的 Web 容器)底层就是用线程池处理请求的,每次进来一个请求,线程池里丢出一个线程,接着干活。但你要是单纯这么理解,那就错得离谱了。

咱得搞清楚:

  1. 线程 ≠ 进程,Spring Boot 只是用线程池管理线程;
  2. 线程池 ≠ 无限线程,线程资源可是贵得很,默认配的线程数量相当有限;
  3. 并发处理的锅,不全是线程的,有很多逻辑其实是异步/非阻塞处理。

所以,“每个请求一个线程”的说法,顶多是个 近似描述,但底层细节和性能调优差远了。你要真信了,回头碰到个高并发场景,服务器直接“炸裂”,谁都拦不住。


最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。
这是大佬写的, 7701页的BAT大佬写的刷题笔记,让我offer拿到手软

Spring Boot 的线程分配机制,到底咋回事?

先说主角——Spring Boot,默认嵌入 Tomcat(或者 Jetty/Undertow),它是怎么处理 HTTP 请求的?

1. Tomcat 的线程池

Tomcat 内部用的是一个线程池(Executor),叫“连接器线程池”,每次有请求进来时:

  • 如果线程池有空闲线程,就拿一个线程出来干活;
  • 如果线程池满了,就根据策略排队、拒绝,或者扩展线程数。

线程池配置:

server: tomcat: threads: max: 200 # 最大线程数(默认200) min-spare: 10 # 最小空闲线程数

  • 多线程的好处? 并发处理效率高,不用每次都创建销毁线程。
  • 问题在哪? 如果任务阻塞(比如数据库慢、I/O 慢),线程就被占住,其他请求没法处理。

2. Spring Boot 的异步处理

Spring Boot 还有异步支持(比如用 @Async 注解),这种情况下,请求线程只是把任务丢给线程池,自己就溜了,后续任务由线程池的线程完成。

配置线程池:

@EnableAsync @Configuration public class AsyncConfig { @Bean public Executor asyncExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(5); // 核心线程数 executor.setMaxPoolSize(10); // 最大线程数 executor.setQueueCapacity(100); // 队列容量 executor.initialize(); return executor; } }

3. 高并发场景中的 Tomcat

高并发场景下,Tomcat 的线程池默认配置可能 扛不住压力,比如:

  • 默认最大线程 200,对于流量突然增高的情况,线程数一下子爆了;
  • 大量慢 SQL 或阻塞操作,让线程池挂起线程太多,响应速度急剧下降。

优化方向:

  • 增加线程池容量:根据业务需要调整 server.tomcat.threads.max
  • 优化后端服务:避免长时间的阻塞操作,尽量用异步逻辑;
  • 如果 Tomcat 不够强,可以换 Undertow,性能比 Tomcat 高一截。

其他语言框架对比:PHP、Python、Go 干得咋样?

这几个语言的 Web 框架处理模型差异还挺大,下面给你对比一下:

  1. PHP
  • PHP 的大多数框架(比如 Laravel),都是“每次请求一个进程”。这意味着每个请求都启动一个独立的进程,处理完成后销毁。
  • 缺点是性能较低,资源消耗大;优点是模型简单,不容易踩多线程的坑。
  • 小优化?用 Swoole 扩展,可以引入协程提高性能。
  1. Python
  • 主流框架(比如 Django、Flask),用的是 多线程+多进程混合,再配合 Gunicorn 或 uWSGI 做请求分发。
  • 比如 Flask 默认是单线程,但你用 Gunicorn 配置,可以指定多个进程/线程。
  1. Go
  • Go 的 Web 框架(比如 Gin、Echo)天生就是“每个请求一个协程”。协程比线程轻量,切换速度快、占用资源少,Go 的并发性能极高。

解决办法:Spring Boot 高并发的正确姿势

写 Web 服务,最终绕不开高并发优化。下面几个方向能让你的服务“顶得住”:

1. 调整线程池参数

Tomcat 默认配置太保守,直接调整 server.tomcat.threads.maxserver.tomcat.threads.min-spare,让线程池能撑住短时间的高并发。

2. 用异步非阻塞

  • 数据库操作:别傻用 JDBC,试试 Spring Data R2DBC,非阻塞;
  • I/O 操作:用 Spring WebFlux,它是基于 Reactor 的响应式编程模型,性能更高。

3. 引入更强的 Web 容器

Tomcat 不够强可以换 Undertow,或者直接用 Netty 做容器,性能能提升好几倍。

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。
这是大佬写的, 7701页的BAT大佬写的刷题笔记,让我offer拿到手软

4. 性能监控+压测

千万别光靠“调感觉”。用 JMeter 或 Apache Benchmark 对接口做压力测试,找到瓶颈再优化。Spring Boot 还能接入 APM 工具(比如 Pinpoint),实时监控性能。


总结:要线程池跑得快,后端逻辑得轻量

Spring Boot 默认是“每个请求一个线程”,但线程池配置决定了你能跑多快。如果是高并发场景,光靠调整线程池参数不够,必须优化后端逻辑,甚至引入更轻量的异步非阻塞框架。

一句话总结:线程池撑起的是并发基础,真正的性能优化在逻辑和架构设计上!

大佬们都知道,技术的世界没有捷径,但多踩几个坑、啃点干货,离大厂 offer 也就不远了。

免费看 500 套技术教程的网站,希望对你有帮助

程序员快看-教程,程序员编程资料站
最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。这是大佬写的,7701页的BAT大佬写的刷题笔记,让我offer拿到手软

求一键三连:点赞、分享、收藏

我的技术网站:cxykk.com 里面有,500套技术系列教程、1万+道,面试八股文、BAT面试真题、简历模版,工作经验分享、架构师成长之路,全部免费,欢迎收藏和转发。

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2024/12/3088.html

分享给朋友:

相关文章

如果我们没有自己的手机操作系统,会出现所谓的“卡脖子”“安全”问题吗?

如果我们没有自己的手机操作系统,会出现所谓的“卡脖子”“安全”问题吗?

前段时间某某高管在微博发文表示:“其实我觉得,中国人需要的不是一个自己的手机os,而是一个全国产的微信,再搭配一些辅助功能。”这算是“安卓开源”开源的代表了吧。然而打脸来的如此之快,10月30日消息,在Linux内核疑似大规...

电视参数哪个最重要?

电视参数哪个最重要?

在选择智能电视时,面板类型是一个关键因素。IPS面板以其宽广的视角和出色的色彩还原能力受到青睐,尤其适合日常观看和游戏。尽管可能会有轻微的漏光,但在大多数情况下,这并不影响使用体验。相比之下,VA面板提供更高的对比度和更深的黑色,增强了沉浸...

想要在双 11 换一台全面无短板的新手机,有没有「闭眼买」的机型推荐?

想要在双 11 换一台全面无短板的新手机,有没有「闭眼买」的机型推荐?

最近一个月各大手机厂商的旗舰机扎堆发布,不知道大家看爽了没?这一代的性能续航大提升,最低 3599 元就能买到,同时老款也有不小的降幅,今年双 11 算是相当适合换手机的节点了!这次,小黑就给大家推荐双 11 期间值得购买的手机...150...

只有我一个人后悔升级鸿蒙next吗?

只有我一个人后悔升级鸿蒙next吗?

我有一台mate 60 pro,第一时间升级了“纯血鸿蒙”。虽然功能并不完善,甚至有些简陋,但是我非常~非常不后悔升级鸿蒙next系统。因为.... 这就是一款“大型养成系游戏“,给我平淡的生活提供了源源不断的情绪价值。我每天特别...

如何看待台积电,三星相继停供大陆7nm及更先进芯片?

在这个事出来之前,我就看到过一个说法,两家Foundry可以在中东建厂,让中东的Fab去干“脏活”。本质上是国内企业搞几个中东的代理人,装作是中东的初创Fabless企业去下单,人家Foundry大概率睁一只眼闭一只眼,只管数钱。然而,紧接...

如何评价小米14pro顶配可以选配卫星通话,小米15全系都无法选配?

如何评价小米14pro顶配可以选配卫星通话,小米15全系都无法选配?

雷总不是说了吗,我可以不用,但你不能没有。市面上OPPO Find X8 Pro和vivo X200 Pro的卫星通信版分别加价300,而荣耀Magic7和Magic7 Pro有卫星通信版且不加价,荣耀更显诚意。我觉得有是更好的,虽然使用卫...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。