一、介绍

对于 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模型中,主要参与的角色有:AcceptorHandler工作线程池。对应于前文中Api的请求过程,它们的分工如下:

  • Acceptor:Accepter线程专门负责建立网络连接(accept)。新连接创建后,交给Handler工作线程池处理请求。
  • Handlers:针对每个请求的连接,Handler工作线程池都会分配一个线程,执行后面的所有步骤(read、decode、process、encode、send)。

三、NIO

tomcat7之后(包含7),默认使用NIO模型,即非阻塞式IO,实现是基于JDK的java.nio包。

tomcat的NIO模型,相比较于BIO模型,多了个Poller角色:AcceptorPollerHandler工作线程池

  • 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 NIO(2)-epoll多路复用 - 腾讯云开发者社区-腾讯云

Java面试题:Tomcat中BIO和NIO线程模型工作原理 - 简书

文章知识点与官方知识档案匹配,可进一步学习相关知识
Java技能树NIONIO概述106747 人正在系统学习中

[转帖]总结:Tomcat的IO模型的更多相关文章

  1. IO模型

    前言 说到IO模型,都会牵扯到同步.异步.阻塞.非阻塞这几个词.从词的表面上看,很多人都觉得很容易理解.但是细细一想,却总会发现有点摸不着头脑.自己也曾被这几个词弄的迷迷糊糊的,每次看相关资料弄明白了 ...

  2. 网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO

    同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出 ...

  3. Linux IO模型和网络编程模型

    术语概念描述: IO有内存IO.网络IO和磁盘IO三种,通常我们说的IO指的是后两者. 阻塞和非阻塞,是函数/方法的实现方式,即在数据就绪之前是立刻返回还是等待. 以文件IO为例,一个IO读过程是文件 ...

  4. 转 网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO

    此文章为转载,如有侵权,请联系本人.转载出处,http://blog.chinaunix.net/uid-28458801-id-4464639.html 同步(synchronous) IO和异步( ...

  5. 网络IO模型

    同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出 ...

  6. [转载] 网络IO模型

    转载自http://blog.csdn.net/zhoudaxia/article/details/8974779 同步(synchronous) IO和异步(asynchronous) IO,阻塞( ...

  7. 36、IO模型与socketserver实现并发

    特别声明本随笔copy于egon(林海峰). 一 IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下:同步.异步.阻塞.非阻塞 同步(synchronous) IO和异步(asynchronou ...

  8. python 浅析IO 模型

    协程:遇到IO操作就切换,但是什么时候切回去呢?怎么确定IO操作? 很多程序员可能会考虑使用"线程池"或"连接池"."线程池"旨在减少创建和 ...

  9. Python之IO模型

    IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下:同步.异步.阻塞.非阻塞 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞 ...

  10. Python并发编程之IO模型

    目录 IO模型介绍 阻塞IO(blocking IO) 非阻塞IO(non-blocking IO) IO多路复用 异步IO IO模型比较分析 selectors模块 一.IO模型介绍 Stevens ...

随机推荐

  1. 数仓调优实践丨SQL改写消除相关子查询

    本文分享自华为云社区<[调优实践]SQL改写消除相关子查询>,作者: 门前一棵葡萄树 . 一.子查询 GaussDB(DWS)根据子查询在SQL语句中的位置把子查询分成了子查询.子链接两种 ...

  2. 【技术控请进】华为云DevCloud深色模式开发解读

    引言 近期,华为云DevCloud推出了开发者友好的深色模式,深受开发者们的喜爱和关注.大家都知道,深色模式(Dark Mode)在iOS13 引入该特性后各大应用和网站都开始支持了深色模式.在这之前 ...

  3. 面试官问我:CSS有哪些属性可以继承?

    摘要:本文带大家学习一下关于CSS属性的继承. 本文分享自华为云社区<关于CSS有哪些属性可以继承?>,作者:黛琳ghz. 前言 今天遇到一个很有意思的题目,通过题目可以顺便学习一下关于C ...

  4. 性能达1.5+倍!昇腾AI助力分子动力学模拟研究

    摘要:在异构计算架构CANN的助力下,AI预测性能达到现有产品的1.5+倍,可预测规模较传统方法提升10000+倍,为光伏材料.新能源电池.半导体材料研究带来巨大的商业应用价值. 本文分享自华为云社区 ...

  5. 高颜值开源数据可视化工具——Superset 2.0正式发布!

    ​ Superset终于迎来了又一个重大的版本更新.使用superset已经近三年的时间了,其为我们提供了数据可视化的解决方案.也成为了最好的商用BI的替代方案. ​ 在Github上本次更新已经发布 ...

  6. 收钱吧与火山引擎VeDI合作一年后 有了哪些新变化?

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群     收钱吧正在和火山引擎数智平台(VeDI)跑出一条业务提效新通路.   相关数据显示,收钱吧的日服务人次就近 ...

  7. PlayWright安装及使用

    PlayWright是由业界大佬微软(Microsoft)开源的端到端 Web 测试和自动化库,可谓是大厂背书,功能满格,虽然作为无头浏览器,该框架的主要作用是测试 Web 应用,但事实上,无头浏览器 ...

  8. 携程OceanBase开源实践——索引统计功能实现

    [作者] 施纬,携程数据库研发工程师,主要负责数据库运维和内核研发. 姜贤富,携程高级数据库研发工程师,主要负责携程数据库监控运维及工具研发,拥有十年运维经验. [概述] 自从2021年OceanBa ...

  9. AIGC加速迭代,云栖大会视频云「媒体服务」专场与你共话云智深度融合

    2023杭州·云栖大会 倒计时5天! 阿里云视频云 5大并行Session 11场话题演讲 深度演绎云智融合的全面进化 「媒体服务」Tech专场 重磅议题剧透来袭 01 「媒体服务」Tech • 新数 ...

  10. SAP发布HTTP接口

    1.创建类 引用标准接口 改写集成的接口方法 此处仅实现POST方法,将传入的JSON报文转为函数传入参数,调用获取物料接口,并将返回的物料信息,转换为JSON报文返回 METHOD if_http_ ...