一、介绍

对于 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. php +libcurl+nghttp2 实现高性能微服务架构

    1.server端nginx编译时增加参数configure --with-http_v2_module     server {        listen       80 http2;      ...

  2. GaussDB(for Redis)游戏实践:玩家下线行为上报

    本文分享自华为云社区<GaussDB(for Redis) 游戏实践:玩家下线行为上报>,作者:GaussDB 数据库 为保护未成年人的身心健康,2007年国家推出网络游戏防沉迷系统,对未 ...

  3. centos8 新增ssh自定义端口与屏蔽默认22端口。

    第一步:修改SSH配置文件(注意是sshd_config而不是ssh_config,多了个d) vim /etc/ssh/sshd_config找到"#Port 22",这一行直接 ...

  4. 火山引擎A/B测试在消费行业的案例实践

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 近日,火山引擎数智平台举办了"走进火山-全链路增长:数据飞轮转动消费新生力"的活动,其中火山引 ...

  5. 1个案例读懂——游戏产品如何用 A/B 测试做增长

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 随着国内游戏用户数量趋于饱和,中国游戏产业也从高速成长期逐渐转型,市场成熟度提升,竞争趋于精细化. 随着游戏出海以 ...

  6. MIGO生产订单入库写入批次特性增强

    一.生产订单入库 MIGO根据生产订单入库时,将生产订单中的字段,写入到批次特性中 二.BADI:MB_MIGO_BADI 调用BADI中的IF_EX_MB_MIGO_BADI~POST_DOCUME ...

  7. CPP-移动语义

    "Move semantics allows us to optimize the copying of objects, where we no longer need the value ...

  8. UVA - 12096 :The SetStack Computer

    题目大意 用集合模拟计算机操作.每执行完一个操作,输出栈顶的集合大小,操作如下: PUSH:空集合压栈 DUP:将栈顶元素再次压栈 UNION:依次弹栈得a,b,求并集后压栈 INTERSECT:依次 ...

  9. 【数据库】E-R图向关系模型转换的规则

    E-R图向关系模型转换的规则: (1) 一个实体型转换为一个关系模式,实体的属性就是关系的属性,实体的码(关键字)就是关系的码. (2) 一个 1:1 联系可以转换为一个独立的关系模式,也可以与任意一 ...

  10. echarts自定义legend样式

    https://blog.csdn.net/changyana/article/details/126281275