任务执行器——Executor

简介: 上节说到接收器Acceptor在接收到socket后会有一系列简单的处理,其中将socket扔进线程池是最重要的一步,线程池是一个怎样东西?其原理在前面的“线程池原理”章节已经说明过了,这里重点讲tomcat中用于处理客户端请求的线程池——Executor。

上节说到接收器Acceptor在接收到socket后会有一系列简单的处理,其中将socket扔进线程池是最重要的一步,线程池是一个怎样东西?其原理在前面的“线程池原理”章节已经说明过了,这里重点讲tomcat中用于处理客户端请求的线程池——Executor。

为确保整个web服务器的性能,应该在接到请求后以最快的速度转交到其他线程上去处理。在接收到客户端的请求后tomcat将对这些请求交给任务执行器Executor,它是一个拥有最大最小线程数限制的线程池,之所以称之为“任务执行器”是因为线程池可以看做是启动了若干线程不断检测某个任务队列,一旦发现有需要执行的任务则执行。如下图,每条线程都不断循环检测任务队列,数量不会少于最小线程数也不能大于最大线程数。

任务执行器的具体实现是使用juc工具包的ThreadPoolExecutor类,它提供了拥有多种机制的线程池,例如有最大最小线程数限制、多余线程回收时间限制、超出最大线程数时线程池做出的拒绝动作等等。继承此类并重写一些方法基本就能满足tomcat个性化需求。

Tomcat的Executor分为两种类型:外部Executor和内部Executor。所谓外部Executor则指程序运行时使用server.xml文件配置的Executor。可以在server.xml文件中通过类似如下配置进行自定义,它表示任务执行器的最大线程数为150,最小线程数为4,线程名前缀为catalina-exec-。

<service>

<Executorname="tomcatThreadPool"namePrefix="catalina-exec-"maxThreads="150" minSpareThreads="4"/>

<Connector executor="tomcatThreadPool" port="8080"protocol="HTTP/1.1" connectionTimeout="20000"

              redirectPort="8443" />

</service>

而内部Executor是指未通过server.xml配置<Executor/>时使用程序里面默认的Executor;这种情况下默认的Executor将成为客户端请求的处理器,它的最小线程数为10,最大线程数为200,线程名字前缀为TP-exec-,线程池里面的线程全部为守护线程,线程数超过10时等待60秒如果还没任务执行的话将销毁此线程。设置为守护进程是为了保证在应用关闭时能同时即使线程池中有正在处理请求的线程也能正常关闭。


点击订购作者《Tomcat内核设计剖析》


目录
相关文章
|
2月前
|
缓存 Java
Executor
【7月更文挑战第22天】
44 0
|
4月前
|
NoSQL Java 程序员
多线程并发之线程池Executor与Fork/Join框架
多线程并发之线程池Executor与Fork/Join框架
77 0
|
4月前
|
并行计算 算法 Java
Java线程池——Executor框架
Executor 框架是 Java5 之后引进的,在 Java 5 之后,通过 Executor 来启动线程比使用 Thread 的 start 方法更好,除了更易管理,效率更好(用线程池实现,节约开销)。 Executor 框架不仅包括了线程池的管理,还提供了线程工厂、队列以及拒绝策略等,Executor 框架让并发编程变得更加简单。
|
11月前
|
存储 Java 调度
【 Executor线程池原理与源码】
【 Executor线程池原理与源码】
|
缓存 安全 Java
MyBatis源码-解读Executor的三个实现类之BatchExecutor(批处理执行器)
MyBatis源码-解读Executor的三个实现类之BatchExecutor(批处理执行器)
281 0
|
设计模式 SQL 缓存
Executor接口|学习笔记
快速学习Executor接口
Executor接口|学习笔记
|
Java 数据库连接 API
一文搞懂Executor执行器和线程池的关系,整体介绍其任务执行/调度体系:ThreadPoolExecutor、ScheduledExecutorService(上)
一文搞懂Executor执行器和线程池的关系,整体介绍其任务执行/调度体系:ThreadPoolExecutor、ScheduledExecutorService(上)
一文搞懂Executor执行器和线程池的关系,整体介绍其任务执行/调度体系:ThreadPoolExecutor、ScheduledExecutorService(上)
|
Java API 调度
一文搞懂Executor执行器和线程池的关系,整体介绍其任务执行/调度体系:ThreadPoolExecutor、ScheduledExecutorService(下)
一文搞懂Executor执行器和线程池的关系,整体介绍其任务执行/调度体系:ThreadPoolExecutor、ScheduledExecutorService(下)
一文搞懂Executor执行器和线程池的关系,整体介绍其任务执行/调度体系:ThreadPoolExecutor、ScheduledExecutorService(下)
|
存储 缓存 资源调度
Executor框架及线程池总结
Executor作为一个灵活且强大的异步执行框架,其支持多种不同类型的任务执行策略,提供了一种标准的方法将任务的提交过程和执行过程进行了解耦开发,基于生产者和消费者模型,还提供了对生命周期的支持,以及统计信息收集,应用程序管理机制和性能检测等机制。
Executor框架及线程池总结
|
分布式计算 Spark C++
Spark的一个经典问题(1个Core5个Executor和5个Core1个Executor有什么区别)
Spark的一个经典问题(1个Core5个Executor和5个Core1个Executor有什么区别)