[转帖]总结:Tomcat的IO模型
一、介绍
对于 linux 操作系统,IO 多路复用使用的是 epoll 方式,对于 windows 操作系统中 IO 多路复用使用的是 iocp 方式,对于 mac 操作系统 IO 多路复用使用的是 kqueue 方式。
由于对于 tomcat 服务器来说基本主要部署在 linux 操作系统上,所以我们主要介绍 linux 的 epoll 模型。epoll 是 event poll 的简称,在 linux 内核版本 2.6 开始支持,所以如果你的 tomcat 服务器如果希望默认使用 NIO,除了自己版本在 tomcat7 以上之外,还需要部署在 linux 内核版本大于 2.6 的操作系统之上。
二、BIO
tomcat6 和之前的版本默认都是使用的 BIO 模型。
BIO模型:即阻塞式IO。
在TomcatBIO模型中,主要参与的角色有:Acceptor和Handler工作线程池。对应于前文中Api的请求过程,它们的分工如下:
- Acceptor:Accepter线程专门负责建立网络连接(
accept)。新连接创建后,交给Handler工作线程池处理请求。 - Handlers:针对每个请求的连接,Handler工作线程池都会分配一个线程,执行后面的所有步骤(
read、decode、process、encode、send)。
三、NIO
tomcat7之后(包含7),默认使用NIO模型,即非阻塞式IO,实现是基于JDK的java.nio包。
tomcat的NIO模型,相比较于BIO模型,多了个Poller角色:Acceptor、Poller和Handler工作线程池。
- Acceptor:Accepter线程专门负责建立网络连接(
accept)。新连接创建后,不是直接使用Worker线程处理请求,而是先将请求发送给Poller缓冲队列。 - Poller:在Poller中,维护了一个Selector对象,当Poller从缓冲队列中取出连接后,注册到该Selector中,阻塞等待读写就绪(
read等待就绪、send等待就绪)。 - Handlers:遍历Selector,找出其中就绪的IO操作,并交给Worker线程处理(
read内存读、decode、process、encode、send内存写)。

参考:
NIO优化原理和Tomcat线程模型 - SegmentFault 思否
[转帖]总结:Tomcat的IO模型的更多相关文章
- IO模型
前言 说到IO模型,都会牵扯到同步.异步.阻塞.非阻塞这几个词.从词的表面上看,很多人都觉得很容易理解.但是细细一想,却总会发现有点摸不着头脑.自己也曾被这几个词弄的迷迷糊糊的,每次看相关资料弄明白了 ...
- 网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出 ...
- Linux IO模型和网络编程模型
术语概念描述: IO有内存IO.网络IO和磁盘IO三种,通常我们说的IO指的是后两者. 阻塞和非阻塞,是函数/方法的实现方式,即在数据就绪之前是立刻返回还是等待. 以文件IO为例,一个IO读过程是文件 ...
- 转 网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO
此文章为转载,如有侵权,请联系本人.转载出处,http://blog.chinaunix.net/uid-28458801-id-4464639.html 同步(synchronous) IO和异步( ...
- 网络IO模型
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出 ...
- [转载] 网络IO模型
转载自http://blog.csdn.net/zhoudaxia/article/details/8974779 同步(synchronous) IO和异步(asynchronous) IO,阻塞( ...
- 36、IO模型与socketserver实现并发
特别声明本随笔copy于egon(林海峰). 一 IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下:同步.异步.阻塞.非阻塞 同步(synchronous) IO和异步(asynchronou ...
- python 浅析IO 模型
协程:遇到IO操作就切换,但是什么时候切回去呢?怎么确定IO操作? 很多程序员可能会考虑使用"线程池"或"连接池"."线程池"旨在减少创建和 ...
- Python之IO模型
IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下:同步.异步.阻塞.非阻塞 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞 ...
- Python并发编程之IO模型
目录 IO模型介绍 阻塞IO(blocking IO) 非阻塞IO(non-blocking IO) IO多路复用 异步IO IO模型比较分析 selectors模块 一.IO模型介绍 Stevens ...
随机推荐
- linux_文本处理工具详细介绍
文本处理工具 1. grep工具 grep是行过滤工具:用于根据关键字进行行过滤 语法和选项 语法: # grep [选项] '关键字' 文件名 常见选项: OPTIONS: -i: 不区分大小写 - ...
- BugBuilder: 高质量大规模缺陷库自动构建方法
摘要:本文提出并开发了高质量大规模缺陷库全自动构建方法BugBuilder,自动从版本控制系统中的人为编写的补丁中提取完整且精准的缺陷修复补丁. 本文分享自华为云社区<BugBuilder: 高 ...
- 几款Java开发者必备常用的工具,准点下班不在话下
摘要:一问一答的形式轻松学习掌握java工具. 以一问一答的形式学习java工具 Q:检查内存泄露的工具有?A: jmap生成dump转储文件,jhat可视化查看. Q:某进程CPU使用率一直占满,用 ...
- vue2升级vue3:vue3 hooks库选用
之前a-hooks:https://ahooks.js.org/,比react-use 精简好用.但是没有vue版本的. 网上有个人实现的:https://github.com/dewfall123/ ...
- flask自定义参数校验、序列化和反序列化
项目总体结构 我的工厂函数factory.py from settings import setting from flask import Flask from models.models impo ...
- cookie与session简介 django操作cookie django操作session
目录 cookie与session简介 早期cookies 随机字符串解决cookies安全问题 禁止浏览器保存cookies django操作cookie set_cookie set_signed ...
- AliSSR 语音超分算法:让在线会议语音更明亮更自然
超分让在线会议语音更明亮,在线会议已成为日常工作中较为普遍的沟通交流方式,接入会议的方式也呈现多样化,比如电脑入会.手机入会又或是电话入会. 雪雅.曜辰|作者 众所周知,高采样率且高带宽的音频信号富含 ...
- ABAP RSA方式调用工行银企直联API
目录 一.研究背景 二. RSA简介 RSA是非对称加密的一种. 对称加密算法: 在加密和解密时使用的是同一个秘钥:如图所示: 非对称加密算法: 需要一对密钥来加密解密,这两个密钥是公开密钥(pu ...
- 【HZERO】值集翻译
值集翻译 值集管理: https://open.hand-china.com/document-center/doc/component/163/16090?doc_id=156008&doc ...
- WPF ElementHost 内存泄露问题
无意中发现,WPF ElementHost 控件如果未正确释放,会存在内存泄露问题.解决方法如下: xaml代码: <Grid x:Name="grid"> <W ...