Tomcat的IO模型实现假设我们把Tomcat当做黑盒子,按照Spring的方式来处理请求,简化的流程是这样的:Tomcat负责读取内核的数据,转换成Servlet对象,然后由Spring框架处理业务后通过Response对象写入返回数据,Tomcat再将返回数据通过内核写入网卡,最后返回到客户端。接下来我们将Tomcat这部分放大,看看黑盒子里是怎么处理的。如图所示,请求的处理分如下几个步骤:Tomcat在启动时会初始化一个ServerSocket用于监听指定端口的IO请求(比如8080)接着启动Acceptor线程,循环调用accept方法接收IO请求(TCP连接建立)将ServerChannel包装成PollerEvent,注册到Poller的event队列中Poller线程循环遍历event队列,将Poller关注的ServerChannel的READ操作注册到Selector中在同一个Poller循环中,用Selector查询ServerChannel的状态,这里一次可以查询到多个ServerChannel的状态,即多路复用将查询到的SelectionKey对应的Serve
Rance
人之幼稚, 不学则愚