原生线程池这么强大,Tomcat 为何还需扩展线程池?

本文探讨了Tomcat和Jetty不直接使用JDK原生线程池的原因,主要在于JDK线程池更适合CPU密集型任务,而Web容器处理的通常是IO密集型任务。Tomcat通过扩展JDK线程池来优化处理策略,以提高并发性能。文章还介绍了Tomcat扩展线程池的实现原理,以及一种处理IO密集型任务的折衷方法。
摘要由CSDN通过智能技术生成

前言

Tomcat/Jetty 是目前比较流行的 Web 容器,两者接受请求之后都会转交给线程池处理,这样可以有效提高处理的能力与并发度。JDK 提高完整线程池实现,但是 Tomcat/Jetty 都没有直接使用。Jetty 采用自研方案,内部实现 QueuedThreadPool 线程池组件,而 Tomcat 采用扩展方案,踩在 JDK 线程池的肩膀上,扩展 JDK 原生线程池。

JDK 原生线程池可以说功能比较完善,使用也比较简单,那为何 Tomcat/Jetty 却不选择这个方案,反而自己去动手实现那?

JDK 线程池

通常我们可以将执行的任务分为两类:

  • cpu 密集型任务
  • io 密集型任务

cpu 密集型任务,需要线程长时间进行的复杂的运算,这种类型的任务需要少创建线程,过多的线程将会频繁引起上文切换,降低任务处理处理速度。

而 io 密集型任务,由于线程并不是一直在运行,可能大部分时间在等待 IO 读取/写入数据,增加线程数量可以提高并发度,尽可能多处理任务。

JDK 原生线程池工作流程如下:

线程池执行流程图

详情可以查看 一文教你安

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值