谁能解释一下处理器线程、tomcat线程和Java线程之间的区别以及它们之间的关系?
据我所知:
处理器有一定数量的核心。如果我有一台双核机器,它将为我提供 4 个线程。Tomcat 也有许多线程(默认值为 200),Java 也可以有许多线程,每次需要时都可以创建线程,也可以从可以配置的线程池中获取线程池。
我对调用端点时发生的情况的理解是这样的(假设我有双核 -> 4 个线程):
- 我拨打“/myEndpoint”
- 我的调用将使用处理器线程之一 -> 处理器线程将请求发送到 Tomcat 的线程之一 -> 这也会将该请求发送到 MyApplication 的主线程
- 我的应用程序有以下选项:自行解决请求并将答案返回给 Tomcat 线程,Tomcat 线程又将其返回给处理器线程。b. 将请求发送到我创建的线程之一或我配置的 ThreadPool 中的线程之一,等待答案并将答案发送回 Tomcat 线程,Tomcat 线程又将其返回到处理器线程。此时第一个问题是:createByMe / threadPoolThread线程是否使用其他 3 个可用的处理器线程之一?(我的逻辑说是)
当我开始同时考虑大量请求时,问题就出现了:
- 300 人拨打“/myEndpoint”
- 由于我的处理器只有 2 个核心(4 个线程),我猜它一次需要 4 个请求,剩余的 296 个请求被放入某种队列中,直到前 4 个请求被处理为止。
- 这四个请求被发送到 Tomcat,Tomcat 还将它们进一步发送到 Java 应用程序。此时第二个问题是:如果我的应用程序的主线程将请求发送到createByMe / threadPoolThread线程,那么该线程应该如何工作,因为我的处理器的所有 4 个线程都在步骤 2 中使用?
我在这里和其他页面上阅读了很多问题,但没有找到一些东西来展示请求的完整生命周期(或者至少使其更清晰)以及多个请求的一些示例(300 个请求示例)具有较少数量的处理器线程) (processorThread -> TomcatThread -> JavaThread -> TomcatThread -> handlerThread ) …