小编mah*_*man的帖子

Tomcat连接器体系结构,线程池和异步servlet

我想了解Tomcat的BIO和NIO连接器的线程模型.我正在引用可在此处找到的连接器的官方Tomcat 7文档.基于此,这是我所怀疑的:

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

请注意:关于tomcat的所有讨论7.

java multithreading tomcat servlets servlet-3.0

24
推荐指数
1
解决办法
6913
查看次数

标签 统计

java ×1

multithreading ×1

servlet-3.0 ×1

servlets ×1

tomcat ×1