tomcat6 NIO源码剖析二(NIO工作流程)
来源:互联网 发布:w7计算机mac地址怎么查 编辑:程序博客网 时间:2024/05/16 06:13
本文主要分析NIO各个组件是如何协同工作的,剖析tomcat NIO实现原理和工作流程。建议读者先阅读tomcat6源码分析系列的三篇文章,NIO实现虽然和BIO实现有很大的不同,但总体的处理思路是相似的。所以理解了BIO模型的处理流程后,理解NIO模型也会容易很多。另外本文默认读者已经对JDK的NIO模型编程有一定了解,否则理解起来可能会比较困难。下面分为六个小节来阐述tomcat的NIO实现。
- 总体处理流程介绍
- Acceptor接受和分发请求
- Poller处理PollerEvent事件
- Poller处理SelectionKey
- SocketProcessor处理流程
- Http11NioProcessor处理流程
总体处理流程介绍
图1 NIO总体处理流程图
Acceptor接收和分发请求
图2 Acceptor接收分发请求图
这里需要注意三个配置参数:maxThreads、maxConnections、acceptCount。
acceptCount:当accept()操作阻塞后,系统还可以接收的连接数。这个连接队列由操作系统维护。
maxThreads:线程池最大线程数。在BIO模型下,当没有空闲线程可用时,从线程池获取工作线程操作被阻塞,Acceptor.accept()操作也因此被阻塞。在NIO模型下,没有可用线程时并不会阻塞 Acceptor.accept()操作。这样就带来一个问题:那连接数如何控制?这就是maxConnections配置的事情了
。maxConnection: tomcat6没有这个配置,所以tomcat6并不能控制接进来的连接数(风险很大),大牛不会没想到这个风险吧,但在其源码和官方文档中确没找到相关配置。Tomcat7做了改进在Acceptor.accept()之后调用了countUpOrAwaitConnection(),若当前正在处理的连接数达到了maxConnections则等待。
Poller处理PollerEvent流程
图3 Poller处理请求序列图
Poller处理每个SelectionKey流程
图4 Process SelectionKey流程图
SocketProcessor处理流程
图5 SocketProcessor处理流程图
Http11NioProcessor处理流程
图6 SocketProcess处理流程图
此处使用的Adapter和BIO模型使用的Adapter相同。CoyoteAdapter的详细处理逻辑在上一篇Tomcat6源码分析系列博客中中已经描述。
0 0
- tomcat6 NIO源码剖析二(NIO工作流程)
- tomcat6 NIO源码剖析二(NIO工作流程)
- Tomcat6 NIO源码剖析一
- Tomcat6 NIO源码剖析一
- tomcat NIO工作流程
- tomcat6 nio
- 【NIO详解】Buffer源码剖析
- Java NIO源码剖析及使用实例(一):Buffer
- NIO流程
- Java NIO(二)
- Java NIO(二)
- NIO学习(二)
- Java NIO详解及实例和源码下载(二)
- NIO(二)
- tomcat6源码分析二(初始化和启动流程)
- tomcat6源码分析二(初始化和启动流程)
- JAVA-NIO实现(二)
- (二)Java NIO Channel
- MapReduce 编程模型在日志分析方面的应用
- Openfire中调试控制台代码JSP的方法
- 关于使用java从http接口取数据保存到本地文件的中文乱码处理
- RailsCasts32 Time in Text Field 时间类型的输入域
- 关于TextBox.Locked属性
- tomcat6 NIO源码剖析二(NIO工作流程)
- 克罗内克积
- 计算几何-经典算法-凸包
- 你跳槽怎样考虑可持续性发展
- Android精美登录界面设计
- 程序员篇----你是如何减压的?
- mysql 实现row_number() over(partition by ) 分组排序功能
- 使用python构建基于hadoop的mapreduce日志分析平台
- nyoj597完数