JVM线程与Tomcat线程有何不同?它们是否具有Map到内核线程公共池

ccgok5k5  于 2023-02-16  发布在  其他
关注(0)|答案(1)|浏览(167)

我试着弄清楚当我运行一个spring Boot 应用程序时,线程是如何作为一个整体工作的,线程调度是如何在每个级别工作的,直到代码在处理器中执行。每个级别的线程池计数有什么限制。
从一开始,
1.新版本的英特尔处理器支持超线程,所以可以并行执行的线程数量是内核数量的两倍。但是可以并行运行的内核线程数量的限制是什么?我的意思是等待队列的限制是什么。

  1. JVM线程和Tomcat线程被Map到内核线程以便执行。是否有一些公共的threadPool来创建JVM线程和Tomcat线程?如果有,这方面的限制是什么。
  2. JVM是否执行线程调度以管理其threadPool。
    请参考一篇文章或一本书,这可以帮助我理解。
rdlzhqv9

rdlzhqv91#

Tomcat线程没有什么特别之处:它们与JVM中的其他线程相同。2在大多数现代操作系统和JVM中,JVM线程直接Map到操作系统线程(当然,根据操作系统的不同,可以实现不同的线程)。
新版本的英特尔处理器支持超线程,所以可以并行执行的线程数量是内核数量的两倍。但是可以并行运行的内核线程数量的限制是什么?我的意思是等待队列的限制是什么。
等待队列AFAIK没有限制。
JVM线程和Tomcat线程被Map到内核线程以便执行。是否有一些公共的threadPool来创建JVM线程和Tomcat线程?如果有,这方面的限制是什么。
任何Java程序都可以启动任意数量的线程(除非它在SecurityManager下运行)。因为您使用的是Spring Boot,所以我假设没有SM在运行。如果您在SM下运行(普通的)Tomcat,Tomcat会作为游戏中的不受限制的玩家运行自己,只有Web应用程序才是有效的沙箱。在上述任何情况下,Tomcat都不受限制。
但是,Tomcat会尊重它所得到的配置。如果您说您想要一个最大大小为100的线程池,那么Tomcat将不会启动超过100个线程来为请求提供服务。(Tomcat在后台运行一些线程来执行内务处理任务,但数量非常少。Tomcat创建的大部分线程将用于请求处理。)
默认情况下,每个<Connector>都有自己的线程池。您可以配置所有<Connector>使用共享线程池。这些线程池可以根据最大连接数等进行控制。详细信息请参见Tomcat User's Guide的连接器部分和Tomcat Configuration Reference的连接器部分。
JVM是否执行线程调度以管理其threadPool。
JVM通常将此任务委托给OS。
请参考一篇文章或一本书,这可以帮助我理解。
如果你想要所有的细节,总是有The Java Language Specification

    • 编辑日期:2019年7月22日**

从Java线程到OS线程的Map完全由JVM处理。Tomcat对它没有任何影响。因此,Java线程概念之下的所有内容都必须在使用中的确切JVM、使用中的确切OS以及它们如何协同工作以最终执行代码的上下文中进行研究。我在这里要说的是,如果没有大量的额外信息,* 你的问题无法回答 *

相关问题