我试图弄清楚运行Spring Boot应用程序时线程是如何整体工作的,线程调度在每个级别如何工作,直到在处理器中执行代码为止。每个级别对线程池计数有什么限制。
从头开始
较新版本的Intel处理器支持超线程,因此可以并行执行的线程数是内核数的两倍。但是对可以同时运行的内核线程数没有什么限制?我的意思是等待队列的限制是什么。
JVM线程和tomcat线程被映射到内核线程以便执行。是否有一些常见的threadPool可从中创建JVM线程和tomcat线程?如果是这样,对此有什么限制。
JVM是否执行线程调度以管理其threadPool。
请参阅一篇文章或一本书,可以帮助我理解。
答案 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线程概念以下的所有内容。我要在这里说的是,没有大量其他信息,您的问题是无法回答的。