Tomcat支持三种接收请求的处理方式
1)BIO 阻塞IO,对应 org.apache.coyote.http11.Http11Protocol
2) NIO 非阻塞IO,基于selectort实现,对应 org.apache.coyote.http11.Http11NIOProtocol
3) APR, 对应org.apache.coyote.http11.Http11AprProtocol
4) AIO 异步非阻塞IO, 对应 org.apache.coyote.http11.Http11NIO2Protocol
tomcat BIO线程模型
tomcat的NIO线程模型
Acceptor: 监听Socket消息,并见消息放入事件队列
PollerEvent: 事件队列
Poller: 默认为单线程,从事件队列中取出Socket, 交给Worker线程池处理
Poller线程中维护了一个Selector对象,NIO就是基于Selector来完成的。
Worker: IO处理线程池
NIO的实现过程:
1) Poller是NIO实现的主要线程
2) 首先作为事件队列的消费者,从队列中取出PollerEvent对象
3) 将对象中的channel以OP_READ事件注册到主Selecor中
4)主Selectotr执行select操作,遍历出可以读数据的socket
5) 将socket交给Worker线程池处理
NIO代码解析
Http11NioProtocol类