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

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

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

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

分享给朋友:

相关文章

国内比较好用的快速开发平台有哪些?

国内比较好用的快速开发平台有哪些?

低代码/零代码快速开发平台,一直是近年来很热的一个词,各大巨头的纷纷加入也给这个赛道。题主需要一个能二次开发的低代码快速开发平台,可以试试JVS低代码(私有化)。JVS低代码前端采用Vuex框架和Element-ui组件库,后端则基于Spr...

有哪些好用不火的软件?

有哪些好用不火的软件?

20个无敌冷门的小众APP,好用到内存爆了都不想卸载,个个是宝藏!特别是第4、13、19个,大多数人都没玩过~喜欢可以双击屏幕取走哦~1、【毒汤日历 】 – 你的每日快乐源泉[iPhone/Android]好用指数:⭐⭐⭐⭐⭐下载地址:各...

什么软件可以看电视直播?

什么软件可以看电视直播?

2024年9月6日最新更新:本文列举的所有看电视直播、或流媒体影视资源点播的软件,我这两天又重新梳理成最新版本,最大程度保证可用性。获取方式见文末图片,或见评论。后续我也将持续更新,文章是旧的软件也会是新的,保证都是最新可用版本。作为一个急...

为何 Linus 一个人就能写出这么强的系统,中国却做不出来?

为何 Linus 一个人就能写出这么强的系统,中国却做不出来?

我给你举个真实的例子。。有一个人叫高伟东,在哈尔滨工作。在2012年做了一个APP。使用词根词缀背单词。名字叫:词根词缀词典这个人编辑了2300余条词根,给10万多条单词建立了词根索引,整理了50多万条的单词记忆方法,包括新版本的诸多新功能...

台积电通知其中国客户,从下周开始,所有 7nm 及以下芯片出货将停止。如何看待这一行为?

台积电通知其中国客户,从下周开始,所有 7nm 及以下芯片出货将停止。如何看待这一行为?

我说美国快要没招了,你信么?这次台积电宣布停止向中国大陆客户供应7纳米及更先进AI芯片,再加上前段时间台积电对华为的制裁,我们基本可以认为,台积电在高端芯片领域,已经彻底把大陆给拉黑了,这也意味着中美芯片战已经到了最关键的时刻,一旦我们克服...

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

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

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

发表评论

访客

看不清,换一张

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