Tomcat 线程池
如下:
初始化线程池:在 Tomcat 启动时,会初始化线程池,并创建一定数量的线程。
接收请求:当客户端发起请求时,Tomcat 的连接器将接收到请求,并将其传递给线程池。
线程池调度:线程池中的线程会被调度来处理请求。如果线程池中有空闲线程,将会有一个线程去执行该请求。如果线程池中没有可用线程,请求将进入等待队列。
请求处理:选中的线程会处理请求,包括解析请求、执行相应的业务逻辑等。该线程会一直处理请求直到完成。
请求完成:处理完请求后,线程将返回到线程池中,变为可用状态,以供处理下一个请求。
等待队列:如果线程池中没有空闲线程,新到达的请求将会进入等待队列。请求按照先到先服务的顺序排队等待处理。等待队列的长度由
acceptCount
参数决定。线程重用:线程池中的线程会被重复使用,避免了频繁创建和销毁线程的开销。这样可以提高性能,并降低资源消耗。
线程管理:线程池还负责管理线程的生命周期,包括创建、销毁和维护线程的状态。
这里的空闲线程指 最大线程,即如果核心线程为2,最大线程为3,但现在来了3个任务,tomcat的线程池会创建一个救急线程来执行第三个任务,并不回加入队列。这个点跟普通线程池不一样。
总结:
提交任务数小于核心线程数,则创建任务数的线程;
当前线程数达到核心线程数,调用任务队列方法;
当前线程数达到最大线程数,默认放入任务队列;
提交任务数小于等于当前线程,表明还有空闲线程,无需创建线程;
提交任务数大于当前线程数小于最大线程数,重写任务队列的offer方法返回false不执行默认的放入队列操作,继续创建线程(false表示任务队列已满);
提交任务数达到任务队列最大值,执行拒绝策略。
关键源码
TaskQueue.java
Connector 配置
Executor 线程配置
tomcat核心组件(题外)
它由多个核心组件组成,这些组件共同协作来实现对 Web 应用程序的处理和管理。以下是 Tomcat 的一些核心组件:
连接器(Connector):连接器负责接收客户端的 HTTP 请求,并将其传递给 Tomcat 进行处理。Tomcat 支持多种类型的连接器,如 HTTP 连接器、AJP(Apache JServ Protocol)连接器等。
引擎(Engine):引擎是 Tomcat 的顶层容器,它负责管理和协调多个虚拟主机(Host)的处理过程。每个引擎都有自己的生命周期和一组关联的虚拟主机。
虚拟主机(Host):虚拟主机用于托管多个 Web 应用程序。每个虚拟主机都有自己的域名或 IP 地址,并可以独立配置和管理自己的 Web 应用程序。
上下文(Context):上下文代表一个 Web 应用程序,它包含了应用程序的配置信息、Servlet、过滤器、监听器等。Tomcat 可以同时运行多个上下文,每个上下文都有唯一的上下文路径。
Servlet 容器(Servlet Container):Servlet 容器负责加载、初始化和管理 Servlet。它提供了与 Servlet 相关的生命周期管理、请求处理和响应生成等功能。
JSP 引擎(JSP Engine):JSP 引擎用于将 JSP(JavaServer Pages)文件转换为 Java 代码,并编译成 Servlet。Tomcat 使用 Jasper 作为默认的 JSP 引擎来处理 JSP 页面。
管理器(Manager):管理器负责管理和维护 Web 应用程序的会话(Session)。它可以跟踪会话的创建和销毁,以及提供会话的持久化和集群支持。
以上是 Tomcat 的一些核心组件,它们共同构成了 Tomcat 的基本架构,使其能够运行和管理 Java Web 应用程序。每个组件都承担着不同的职责和功能,相互配合,完成对 Web 应用程序的处理和服务。
- 点赞
- 收藏
- 关注作者
评论(0)