我想了解Tomcat的BIO和NIO连接器的线程模型.我正在引用可在此处找到的连接器的官方Tomcat 7文档.基于此,这是我所怀疑的:
- acceptorThread(s):这是一个或最多2个线程(如文档中所述),它只负责接受进入的连接.这可以使用acceptorThreadCount进行配置,并建议多个机器可以使用两个以上 -
- 为什么是这样 ?
- 这是否意味着同时打开的连接数量与服务器系统允许的cpus数量与打开文件描述符数量成比例?
- maxConnections(s):
- 此设置与acceptCount之间的关系是什么,以及系统上打开的文件描述符的数量.
- 为什么NIO连接器(10000)的默认值比BIO(= maxThreads)高得多?
- acceptCount:当所有请求处理线程都忙时,这是请求的队列.
- 将请求放入此队列时,是否也为其分配了文件描述符?或者仅当请求被主动处理时,它是否使用文件描述符?
- 请求处理线程:此池中的线程数由maxThreads和minSpareThreads属性配置.
- 这个线程池和acceptorThreads之间有什么关系?接受者线程是否会产生此池中的线程?
- 据我所知,NIO模型对请求处理线程的效率高于BIO模型.它如何实现这种效率?
- 正如我在各种来源中所读到的,NIO模型中的线程遵循每个请求范例的线程与BIO模型的每个连接范例的线程.此外,在NIO连接器模型中,实际请求处理被委托给不同的应用程序监视线程,而服务器的请求处理线程返回到线程池,以接受更多连接.那么,这是否意味着只有与服务器的连接具有HTTP Keep-Alive特性或者应用程序使用Servlet 3.0的异步处理功能时,NIO模型的好处才会明显?
- Servlet 3.0:
- 使用Servlet 3.0时,应用程序servlet线程池的大小(相对于连接器线程池大小)应该达到最佳效率?
- 当使用BIO模型和它们时,请问如何处理(假设连接器线程仍然使用每个连接模型的线程)会有什么不同吗?
请注意:关于tomcat的所有讨论7.