错误理解
之前以为,Tomcat Nio多路复用在建立连接,到分配servlet请求的时候都会存在在io阻塞的时候线程会被复用,一个线程处理多个请求的情况。
实际情况
在Tomcat的NIO模型中,使用了多路复用技术来处理连接,可以同时处理多个连接请求。但在处理Servlet时,通常情况下,一个Servlet请求会被分配给一个线程来处理。
当一个请求到达Tomcat时,Tomcat会使用线程池中的线程来处理该请求。在NIO模型中,一个线程可以处理多个请求,这是通过多路复用技术实现的。然而,一旦请求被分配给一个线程,它将独立地在该线程上进行处理。
这意味着在Servlet处理期间,通常情况下,一个Servlet请求会一直由同一个线程来处理,直到请求完成并响应返回。这有助于确保请求的上下文和状态在处理过程中保持一致,并避免并发访问的问题。
请注意,Tomcat的配置和实现可能会有所不同,可以根据具体的Tomcat版本和配置进行调整。例如,通过线程池配置的大小和线程池的工作方式,以及Tomcat的连接器配置等,都可能会对请求的处理方式产生影响。
总而言之,在Tomcat的NIO模型中,通常是将一个Servlet请求分配给一个线程来处理,以确保请求的上下文和状态的一致性。然而,Tomcat的具体配置和版本可能会对这种处理方式有所调整,因此需要根据实际情况进行考虑和配置。
总结:
虽然看过tomcat nio线程模型,知道acceptor、 任务处理线程池,也看过netty线程模型。但是一直没有和spring或者其他框架代码具体场景联系起来,不知道哪一步是哪一步。还是需要查看对应源码,源码之下无秘密。