设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 数据 手机
当前位置: 首页 > 服务器 > 系统 > 正文

Tomcat 中的 NIO 源码分析(13)

发布时间:2020-01-07 12:09 所属栏目:52 来源:站长网
导读://ThismeanswegotanOOMorsimilarcreatingathread,orthat //thepoolanditsqueuearefull getLog.error(sm.getString(endpoint.process.fail),t); returnfalse; } returntrue; } NioEndpoint # createSocketProcessor

// 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 线程池中。

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读