目前市场上常用的开源Java
Web容器有
Tomcat、
Resin和
Jetty。其中Resin从V3.0后需要购买才能用于商业目的,而其他两种则是纯开源的。可以分别从他们的网站上下载最新的二进制包和源代码。
作为Web容器,需要承受较高的访问量,能够同时响应不同用户的请求,能够在恶劣环境下保持较高的稳定性和健壮性。在HTTP服务器领域,Apache HTTPD的效率是最高的,也是最为稳定的,但它只能处理静态页面的请求,如果需要支持动态页面请求,则必须安装相应的插件,比如mod_perl可以处理Perl脚本,mod_python可以处理Python脚本。
上面介绍的三中Web容器,都是使用Java编写的HTTP服务器,当然他们都可以嵌到Apache中使用,也可以独立使用。分析它们处理客户请求的方法有助于了解Java多线程和线程池的实现方法,为设计强大的多线程服务器打好基础。
Tomcat是使用最广的Java Web容器,功能强大,可扩展性强。最新版本的Tomcat(5.5.17)为了提高响应速度和效率,使用了Apache Portable Runtime(APR)作为最底层,使用了APR中包含Socket、缓冲池等多种技术,性能也提高了。APR也是Apache HTTPD的最底层。可想而知,同属于ASF(Apache Software Foundation)中的成员,互补互用的情况还是很多的,虽然使用了不同的开发语言。
Tomcat 的线程池位于tomcat-util.jar文件中,包含了两种线程池方案。方案一:使用APR的Pool技术,使用了JNI;方案二:使用Java实现的ThreadPool。这里介绍的是第二种。如果想了解APR的Pool技术,可以查看APR的源代码。
ThreadPool默认创建了5个线程,保存在一个200维的线程数组中,创建时就启动了这些线程,当然在没有请求时,它们都处理“等待”状态(其实就是一个while循环,不停的等待notify)。如果有请求时,空闲线程会被唤醒执行用户的请求。
具体的请求过程是: 服务启动时,创建一个一维线程数组(maxThread=200个),并创建空闲线程(minSpareThreads=5个)随时等待用户请求。 当有用户请求时,调用 threadpool.runIt(ThreadPoolRunnable)方法,将一个需要执行的实例传给ThreadPool中。其中用户需要执行的实例必须实现ThreadPoolRunnable接口。 ThreadPool
首先查找空闲的线程,如果有则用它运行要执行ThreadPoolRunnable;如果没有空闲线程并且没有超过maxThreads,就一次性创建
minSpareThreads个空闲线程;如果已经超过了maxThreads了,就等待空闲线程了。总之,要找到空闲的线程,以便用它执行实例。找到
后,将该线程从线程数组中移走。 接着唤醒已经找到的空闲线程,用它运行执行实例(ThreadPoolRunnable)。 运行完ThreadPoolRunnable后,就将该线程重新放到线程数组中,作为空闲线程供后续使用。
由此可以看出,Tomcat的线程池实现是比较简单的,ThreadPool.java也只有840行代码。用一个一维数组保存空闲的线程,每次以一个较小步伐(5个)创建空闲线程并放到线程池中。使用时从数组中移走空闲的线程,用完后,再“归还”给线程池。
分享到:
相关推荐
Tomcat提供了两种线程池实现,一种是基于Apache Portable Runtime (APR)的Pool技术,另一种是纯Java实现的ThreadPool。本文主要探讨后者,即Java实现的线程池。 Java实现的线程池位于`tomcat-util.jar`中,初始化时...
Tomcat的线程池实现是基于Apache Commons JMX的ExecutorService,它是对Java标准库ExecutorService的一种扩展,增加了更多的监控和管理功能。 Tomcat的线程池主要由`org.apache.tomcat.util.threads.TaskQueue`和`...
NIO模式下,Tomcat使用一个线程池处理多个连接,提高了并发性能。 五、Session管理 Tomcat提供了内置的Session管理,包括会话创建、有效期设置、会话跟踪、分布式环境下的会话复制等。默认情况下,Session信息存储...
【标题】"简单的Tomcat源码实现"涵盖了Tomcat服务器的基础构建和运行原理,这是一个针对初学者或希望深入了解Tomcat内部工作方式的开发者所关注的话题。Tomcat是Apache软件基金会的Jakarta项目中的一个核心项目,它...
在这个“tomcat实现websocket聊天室”的项目中,我们将深入探讨如何利用Tomcat搭建一个具备单聊、群聊、数据库管理以及用户管理功能的聊天室。 首先,我们需要理解WebSocket API的基本概念。WebSocket协议定义了两...
6. 性能优化:Tomcat可以通过调整连接器配置(如最大连接数、超时设置)和容器配置(如线程池大小、内存分配)来优化性能。此外,还可以启用压缩、缓存等特性以减少网络传输和提高响应速度。 总结来说,“简单的...
- **并发线程模式**:Tomcat使用线程池来处理并发请求,提高性能。 - **接收请求与处理**:Tomcat通过Coyote Connector接收HTTP请求,并将其转化为内部格式供处理组件使用。 - **Servlet容器的实现**:Tomcat的...
Tomcat是一款广泛使用的开源Java Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范,是开发和部署Java Web应用程序的关键工具。Tomcat的运行原理主要包括以下几个方面: 1. **架构概述**:Tomcat的...
在本项目中,我们将探讨如何利用 Netty 实现一个简易版的 Tomcat,即一个基础的 HTTP 服务器容器。Tomcat 是一个广泛使用的开源 Java Servlet 容器,它实现了 Java EE 的 Web 应用程序规范。 首先,我们需要了解 ...
在描述中提到的服务端采用Executors线程池实现,这意味着学生将学习如何使用Java的并发库来管理线程,提高并发性能。 4. **线程池**:ExecutorService是Java并发框架的一部分,它可以有效地管理和控制线程。使用...
对于性能调优,Tomcat可以通过调整`server.xml`中的参数,例如最大连接数、线程池大小等来提高处理能力。对于Nginx,可以优化工作进程数、连接数限制和超时设置等。还可以编写脚本来自动化这些调优过程,确保系统...
当请求到来时,Tomcat会从线程池中获取一个空闲线程来执行请求,而不是每次请求都创建新线程,这样可以减少系统资源消耗。 7. **配置文件**:Tomcat的配置主要通过server.xml、web.xml等XML文件进行。这些文件定义...
7. 性能优化:Tomcat 8在内存管理、线程池和垃圾收集等方面进行了优化,提升了服务器的性能。 8. 安全增强:提供了更多的安全特性,如更好的密码加密存储和更强的身份验证机制。 总结来说,Tomcat 7和Tomcat 8在...
【描述】虽然描述部分为空,但我们可以推测博主pirate4444在文章中可能以一个简化的Tomcat实现为例,逐步解析其核心组件,如Catalina(核心处理引擎)、 Coyote(HTTP连接器)和 Jasper(JSP编译器)等。他可能还会...
在处理数据库连接方面,Tomcat提供了一种高效且可管理的数据源实现,名为“tomcat-jdbc数据源”。这个数据源是Tomcat内建的一种连接池,它在性能和内存管理上比标准的Java JDBC连接池更优秀,尤其适用于高并发的Web...
Tomcat,全称Apache Tomcat,是Apache软件基金会的一个开源项目,它是一个实现了Java Servlet和JavaServer Pages(JSP)技术的Web应用服务器,主要用于处理Java的动态内容。Tomcat是轻量级的,相比其他如IBM ...
1. **Tomcat简介**:Tomcat作为一个轻量级的Web服务器,其设计目标主要是为了提供一个小型、高效的Java Web应用服务器,用于开发和部署简单的Web应用程序。Tomcat的核心功能包括处理HTTP请求,解析HTTP协议,以及...
4. **Executor**: Executor是Tomcat 5.5引入的一个新特性,允许开发者自定义线程池来处理请求。这在处理大量并发请求时非常有用,可以更好地控制线程资源,避免线程过多导致的内存消耗。 5. **...
Tomcat是一款开源的Java Servlet容器,它实现了Java EE中的Web应用程序规范,如Servlet和JSP。作为服务器,Tomcat承载着许多关键业务,因此其稳定性和可靠性对于整个系统来说极为重要。 针对"Windows平台下监控...
4. 优化Tomcat线程池设置,根据实际负载调整。 七、故障排查 1. 查看`logs/catalina.out`、`logs/host-manager.*.log`和`logs/manager.*.log`等日志文件。 2. 使用JMX监控Tomcat运行状态,如内存使用、线程池情况等...