我试图弄清楚当我运行 spring boot 应用程序时线程如何作为一个整体工作,线程调度如何在每个级别工作直到代码在处理器中执行。每个级别对线程池数量的限制是什么。
从头开始,
较新版本的英特尔处理器支持超线程,因此可以并行执行的线程数是核心数的两倍。但是对可以并发运行的内核线程数有什么限制呢?我的意思是等待队列的限制是多少。
JVM 线程和tomcat 线程映射到内核线程以便执行。是否有一些通用的线程池可以从中创建 JVM 线程和 tomcat 线程?如果是这样,对此有何限制。
JVM 是否进行线程调度以管理其线程池。
请引用一篇文章或一本书,可以帮助我理解。
最佳答案
Tomcat 线程没有什么特别之处:它们与 JVM 中的所有其他线程相同。在大多数现代操作系统和 JVM 中,JVM 线程直接映射到操作系统线程(当然,可以根据操作系统的不同实现不同)。
Newer version of intel processor supports hyper-threading so the no of threads that can execute parallelly is twice the no of core. but what is the restriction on no of kernel threads that can run concurrently? i mean what is the limit on wait queue.
AFAIK 等待队列没有限制。
JVM threads and tomcat threads are mapped to kernel threads in order to execute. Is there some common threadPool from which JVM threads and tomcat threads are created? if so what is the restriction on this.
任何 Java 程序都可以启动任意数量的线程(除非它在 SecurityManager 下运行)。由于您使用的是 Spring Boot,我假设没有 SM 在起作用。如果您在 SM 下运行(vanilla)Tomcat,Tomcat 将在游戏中作为不受限制的玩家运行,并且只有 Web 应用程序被有效沙盒化。以上任何一种情况,Tomcat都不受约束。
但是,Tomcat 会遵守给定的配置。如果你说你想要一个最大大小为100的线程池,那么Tomcat不会启动超过100个线程来服务请求。 (Tomcat 在后台运行一些线程来处理内务任务,但数量非常少。Tomcat 创建的大部分线程将用于请求处理。)
每个<Connector>
默认情况下有自己的线程池。您可以配置所有 <Connector>
s 使用共享线程池。这些线程池可以根据最大连接数等进行控制。参见 Tomcat User's Guide关于连接器的部分和 Tomcat Configuration Reference的连接器部分了解详细信息。
Does JVM do thread scheduling in order to manage its threadPool.
JVM 通常将此委托(delegate)给操作系统。
please refer an article or a book, which can help me understand.
如果您想要所有详细信息,总有 The Java Language Specification .
编辑 2019-07-22
从 Java 线程到 OS 线程的映射完全由 JVM 处理。 Tomcat 对它没有任何影响。因此,必须在确切使用的 JVM、使用的确切操作系统以及它们如何协同工作以最终执行代码的上下文中研究 Java 线程概念下的所有内容。我在这里想说的是,如果没有大量额外信息,您的问题无法回答。
关于multithreading - JVM线程与tomcat线程有何不同,它们是否有一个映射到内核线程的公共(public)池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57113977/