Tomcat 中的 NIO 源码分析
// 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 线程池中。 (编辑:辽源站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |