【发布时间】:2014-05-16 06:39:08
【问题描述】:
这是我的理解。
Apache Tomcat 的线程池(是否称为连接器线程池?)有多个线程(默认为 200)。现在这意味着在特定时间,200 人可以与我的 Web 应用程序进行通信。
现在,以一个特定连接到我的应用程序的场景为例。我收到一个请求,服务器上的 tomcat 客户端检查是否有任何线程可用于满足该请求。如果它是好的,否则我们会返回一些错误代码。现在,如果成功,我分配给该请求的那个线程是否会与该特定客户端相关联,直到他的请求未被处理?
基本上,作为用户,如果我转到www.myApp.com,我会从线程池中获取一个线程,该线程会从服务器获取所有信息并将最终的 html 返回给我。之后线程空闲并返回池。现在,如果我单击其他内容,然后再次转到线程池并分配一个线程(如果可用)并继续运行。是这样的吗?
问题 2
假设我的服务器端有一个 Java 应用程序。因此,当我点击一个 url 时,它会将我带到一些 java 代码。现在是不是,我从 Tomcat Threadpool 获得的线程,该线程将执行我的代码?
如果是这样,如果我在我的 java 代码中创建新线程会发生什么,这些线程是从 Tomcat 的线程池中获取还是从创建的 Java 的线程池中获取?另外,这种情况下Tomcat的线程执行会怎样?
谢谢。
如果您知道的话,请提供一些 Tomcat 官方参考资料/资源,我可以在其中阅读这些内容。干杯。
【问题讨论】:
-
1.是的,您的理解在概念上是正确的。 2. 该线程将执行您的代码。如果你创建一个新线程,它与 Tomcat 的线程池无关。 Tomcat 的线程继续照常运行。
-
@JarrodRoberson 不要忘记并非所有任务都受 CPU 限制。可以“并发”连接的人数并不是 100% 连接到可以并发运行的 CPU 线程数。此外,即使在指代同一内核上的多个线程时,我们通常也会使用“并发”一词。
-
@JarrodRoberson 当您说没有 Java 线程池之类的东西时,您到底在暗示什么。什么是更贴切的术语。我的意思是我的 Java 应用程序创建的线程池。
-
@Kraken:AJAX 请求与其他 HTTP 请求没有什么不同。
-
@JasonC asynchronously not 与 concurrent 相同,两者被混为一谈初学者的事情,并且继续混淆他们试图解释你的意思而不是使用已经存在的适当语义,这对他们不利。 4核系统只能同时服务4个客户端,它可以在单个非阻塞I/O上异步服务数千或数万个客户端没有任何并发的线程。
标签: java multithreading tomcat threadpool