tomcat中的BIO与NIO发展

本文介绍了Tomcat支持的BIO和NIO模型,重点讲解了NIO的非阻塞机制,以及在高并发场景下的优势。通过Selector和多路复用,NIO减少了线程开销,适用于连接密集型应用,如Dubbo和Jetty等。

tomcat中的NIO发展

前言

Tomcat目前支持BIO(阻塞 I/O)、NIO(非阻塞 I/O)、AIO(异步非阻塞式IO,NIO的升级版)、APR(Apache可移植运行库)模型,本文主要介绍NIO模型,目前NIO模型在各种分布式、通信、Java系统中有广泛应用,如Dubbo、Jetty、Zookeeper等框架中间件中,都使用NIO的方式实现了基础通信组件

BIO

传统的BIO模型,每个请求都会创建一个线程,当线程向内核发起读取数据申请时,在内核数据没有准备好之前,线程会一直处于等待数据状态,直到内核把数据准备好并返回
在Tomcat中,由Http11Protocol实现阻塞式的Http协议请求,通过传统的ServerSocket的操作,根据传入的参数设置监听端口,如果端口合法且没有被占用则服务监听成功,再通过一个无限循环来监听客户端的连接,如果没有客户端接入,则主线程阻塞在ServerSocket的accept操作上(在Tomcat8、9的版本中已经不支持BIO)
第一次阻塞 connect调用:等待客户端的连接请求,如果没有客户端连接,服务端将一直阻塞等待
第二次阻塞 accept调用:客户端连接后,服务器会等待客户端发送数据,如果客户端没有发送数据,那么服务端将会一直阻塞等待客户端发送数据
在Tomcat中,维护了一个worker线程池来处理socket请求,如果worker线程池没有空闲线程,则Acceptor将会阻塞,所以在有大量请求连接到服务器却不发送消息(占用线程,阻塞与accept的调用)的情况下,会导致服务器压力极大

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值