Tomcat的Threadpool究竟是如何工作的 [已关闭]

2022-09-03 02:02:12

这是我的理解。

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

现在,假设一个场景是当一个特定应用程序连接到我的应用程序时。我收到一个请求,服务器上的tomcat客户端检查是否有任何线程可以满足请求。如果它是好的,否则我们会返回一些错误代码。现在,如果成功,我分配给该请求的那一个线程是否会与该特定客户端相关联,直到他的请求未得到处理?

基本上,作为用户,如果我去,我从线程池中得到一个线程,从服务器获取所有信息,并给我最终的html。之后,线程是空闲的,并返回到池。现在,如果我单击其他内容,则再次转到线程池并分配一个线程(如果可用),然后继续。这是它的工作原理吗?www.myApp.com

问题 2

比方说,我的服务器端有一个Java应用程序。因此,当我点击一个url时,它会带我到一些java代码。现在是不是,我从Tomcat Threadpool获得的线程,该线程将执行我的代码?

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

谢谢。

请提供一些Tomcat官方参考/资源,如果您知道任何事情,我可以阅读有关此类内容的信息。干杯。


答案 1

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

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

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

是的。。。除非您使用的是最新版本的 Servlet 规范中添加的异步请求处理功能(在这种情况下,可以使用 200 个线程“同时”处理 200 多个请求。但这需要一个请求在等待某些事情发生时将控制权交给另一个请求。阅读此内容了解简介。

这是它的工作原理吗?

或多或少。。。

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


比方说,我的服务器端有一个Java应用程序。因此,当我点击一个url时,它会带我到一些java代码。现在是不是,我从Tomcat Threadpool获得的线程,该线程将执行我的代码?

这是没有道理的。如果你在服务器端有一个Java应用程序,那么你需要解释你如何从HTTP请求(“点击[原文如此]一个url”)到运行Java应用程序。只有这样,我们才能告诉您是否涉及线程池线程。

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

同样,这取决于 Java 应用程序的运行方式。例如,如果您的 webapp 用于在服务器端运行应用程序,则它位于与 Tomcat 不同的 JVM 中,并且没有应用程序线程将位于 Tomcat 线程池中。Runtime.exec("java ... classname")

还有人指出,本身并不存在“Java线程池”。如果您的 Java 应用程序选择这样做,那么它可以创建和使用线程池。但是,如果没有,那么Java线程就不会被池化。它们在终止时大部分被释放,任何剩余的数据结构在垃圾回收对象时都会被回收。Thread


答案 2