Tomcat的Threadpool究竟是如何工作的

Kra*_*ken 8 java multithreading tomcat threadpool

所以这是我的理解.

Apache Tomcat的线程池(称为连接器Threadpool?)有许多线程(默认为200).现在这意味着在特定时间,200人可以与我的Web应用程序进行通信.

现在,采用特定与我的应用程序连接的方案.我收到一个请求,服务器上的tomcat客户端检查是否有可用的线程来满足请求.如果它是好的,否则我们会给出一些错误代码.现在,如果成功,那个我已分配给该请求的一个线程是否会与该特定客户端关联,直到他的请求未被处理为止?

基本上,作为一个用户,如果我去www.myApp.com,我从线程池中获取一个线程,从服务器获取所有信息,并给我回到最后的HTML.之后,线程是免费的,然后回到池中.现在,如果我点击其他内容,那么再次转到线程池并获得一个线程(如果可用)并继续进行.这是怎么回事?

问题2

比方说,我的服务器端有一个Java应用程序.所以,当我点击一个网址时,它会带我去一些java代码.现在是,我从Tomcat Threadpool获得的线程,该线程将执行我的代码?

如果是这样的话,如果我在我的java代码中创建新线程会发生什么,这些线程是从Tomcat的线程池获取还是来自Java的线程池创建的?另外,在这种情况下,执行Tomcat的线程会发生什么?

谢谢.

请提供一些Tomcat官方参考/资源,如果您了解任何内容,我可以阅读这些内容.干杯.

Ste*_*n C 10

现在这意味着在特定时间,200人可以与我的Web应用程序进行通信.

不完全是.这意味着您的服务器可以同时处理 200个请求1.队列中可能存在许多其他请求,等待线程变为可用.

现在,如果成功,那个我已分配给该请求的一个线程是否会与该特定客户端关联,直到他的请求未被处理为止?

是的...除非您使用最近版本的Servlet规范中添加的异步请求处理功能.(在这种情况下,有可能用200个线程"同时"处理超过200个请求.但这需要一个请求在等待某事发生时放弃对另一个请求的控制.请阅读此内容以进行介绍.)

这是怎么回事?

或多或少 ...

1 - 为了迂腐,你可能(可能)需要200多个核心来处理在同一时刻发生的200个请求.因此,我从最终用户的角度"同时"使用,他们无法看到服务器"黑匣子"内部实际发生的情况.但话说回来,一个物理线程/核心并非不可能在同一时刻为多个请求执行工作.最明显的情况是有很多相同的请求一起处理.


比方说,我的服务器端有一个Java应用程序.所以,当我点击一个网址时,它会带我去一些java代码.现在是,我从Tomcat Threadpool获得的线程,该线程将执行我的代码?

这没有意义.如果您在服务器端有一个Java应用程序,那么您需要解释如何从HTTP请求("点击[sic] url")到运行Java应用程序.只有这样我们才能告诉你是否涉及线程池线程.

如果是这样的话,如果我在我的java代码中创建新线程会发生什么,这些线程是从Tomcat的线程池获取还是来自Java的线程池创建的?另外,在这种情况下,执行Tomcat的线程会发生什么?

再一次,它取决于您的Java应用程序的运行方式.例如,如果您的webapp Runtime.exec("java ... classname")用于在服务器端运行应用程序,那么它与Tomcat位于一个单独的JVM中,并且所有应用程序线程都不在Tomcat线程池中.

还有人指出,本身没有"Java线程池" .如果您的Java应用程序选择,它可以创建和使用线程池.但如果没有,则Java线程不会被合并.它们在终止时基本上被丢弃,并且当Thread对象被垃圾收集时回收任何剩余的数据结构.

  • @JarrodRoberson - 您的downvote已被注意到.而不仅仅是挑剔(我不打算辩论我对这个词的使用!)人们的术语,如果你自己写了这个问题的答案会更有帮助. (3认同)
  • @JarrodRoberson你指的是"明确定义并同意"同时","并发"或"异步"的语义和定义吗?你要求语义上的精确性,但你所说的两个词("并发",特别是你所关注的词)都没有用在原始问题或这个答案中,所以不清楚这种侵略性在哪里是来自. (2认同)