加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 服务器 > 系统 > 正文

Tomcat 中的 NIO 源码分析

发布时间:2020-01-09 14:24:50 所属栏目:系统 来源:站长网
导读:副标题#e# 虽然本文的源码篇幅也不短,但是 Tomcat 的源码毕竟不像 Doug Lea 的并发源码那么变态,对于大部分读者来说,阅读难度比之前介绍的其他并发源码要简单一些,所以读者不要觉得有什么压力。 本文基于 Tomcat 当前(2018-03-20)最新版本 9.0.6。 先简

// This means we got an OOM or similar creating a thread, or that 

// the pool and its queue are full 

getLog.error(sm.getString("endpoint.process.fail"), t); 

return false; 

return true; 

NioEndpoint # createSocketProcessor

@Override 

protected SocketProcessorBase<NioChannel>createSocketProcessor( 

SocketWrapperBase<NioChannel> socketWrapper, SocketEvent event) { 

return new SocketProcessor(socketWrapper, event); 

我们看到,提交到 worker 线程池中的是 NioEndpoint.SocketProcessor 的实例,至于它的 run 方法之后的逻辑,我们就不再继续往里分析了。

总结

最后,再祭出文章开始的那张图来总结一下:

这里简单梳理下前面我们说的流程,帮大家回忆一下:

指定 Protocol,初始化相应的 Endpoint,我们分析的是 NioEndpoint;

init 过程:在 NioEndpoint 中做 bind 操作;

start 过程:启动 worker 线程池,启动 1 个 Acceptor 和 2 个 Poller,当然它们都是默认值,可配;

Acceptor 获取到新的连接后,getPoller0 获取其中一个 Poller,然后 register 到 Poller 中;

Poller 循环 selector.select(xxx),如果有通道 readable,那么在 processKey 中将其放到 worker 线程池中。

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读