JVM线程与tomcat线程有何不同,它们是否具有映射到内核线程的公共池

时间:2019-07-19 13:53:17

标签: multithreading tomcat operating-system jvm kernel

我试图弄清楚运行Spring Boot应用程序时线程是如何整体工作的,线程调度在每个级别如何工作,直到在处理器中执行代码为止。每个级别对线程池计数有什么限制。

从头开始

  1. 较新版本的Intel处理器支持超线程,因此可以并行执行的线程数是内核数的两倍。但是对可以同时运行的内核线程数没有什么限制?我的意思是等待队列的限制是什么。

  2. JVM线程和tomcat线程被映射到内核线程以便执行。是否有一些常见的threadPool可从中创建JVM线程和tomcat线程?如果是这样,对此有什么限制。

  3. JVM是否执行线程调度以管理其threadPool。

请参阅一篇文章或一本书,可以帮助我理解。

1 个答案:

答案 0 :(得分:0)

Tomcat线程没有什么特别之处:它们与JVM中的所有其他线程相同。在大多数现代的OS和JVM中,JVM线程直接映射到OS线程(当然,具体取决于OS的实现方式也不同。)

  

较新版本的Intel处理器支持超线程,因此可以并行执行的线程数是内核数的两倍。但是对可以同时运行的内核线程数没有什么限制?我的意思是等待队列的限制是什么。

等待队列AFAIK没有限制。

  

JVM线程和tomcat线程被映射到内核线程以便执行。是否有一些常见的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通常将其委托给操作系统。

  

请参阅一篇文章或一本书,可以帮助我理解。

如果您需要所有详细信息,总会有The Java Language Specification

编辑2019-07-22

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