【问题标题】:how different is JVM thread from tomcat threads and do they have a common pool which maps to kernel threadsJVM 线程与 tomcat 线程有什么不同,它们是否有一个映射到内核线程的公共池
【发布时间】:2019-11-28 12:54:51
【问题描述】:

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

从头开始,

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

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

  3. JVM 是否进行线程调度以管理其线程池。

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

【问题讨论】:

    标签: multithreading tomcat operating-system jvm kernel


    【解决方案1】:

    Tomcat 线程没有什么特别之处:它们与 JVM 中的所有其他线程相同。在大多数现代操作系统和 JVM 中,一个 JVM 线程直接映射到一个操作系统线程(当然,根据操作系统的不同,它的实现方式也不同)。

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

    等待队列 AFAIK 没有限制。

    JVM 线程和 tomcat 线程映射到内核线程以便执行。是否有一些共同的 threadPool 从中创建 JVM 线程和 tomcat 线程?如果是这样,这有什么限制。

    任何 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 的连接器部分。

    JVM 是否进行线程调度以管理其线程池。

    JVM 通常将此委托给操作系统。

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

    如果您想了解所有详细信息,总有The Java Language Specification

    编辑 2019-07-22

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

    【讨论】:

    • 据我了解,用户线程通过多对多映射策略映射到内核线程。在这种情况下,内核线程数与内核数相同,并且对用户级线程数没有限制。
    • 如我所说,每个<Connector>都配置了一个线程池。这些池可以是独立的,也可以在连接器之间共享。 Tomcat 中没有“匿名”线程池。所以如果你问的是Tomcat中其他类型的线程池,请给它命名。
    • 请澄清您所说的“内核线程”是什么意思。我以为您使用该描述来表示“操作系统中的本机线程”,但您似乎真的在谈论正确的kernel threads
    • 没有“tomcat threadPool”之类的东西。所以不,连接器线程池不是“tomcat threadPool”的一部分。但是第二件事不存在,所以……没关系。
    猜你喜欢
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 2012-01-31
    • 2015-07-26
    • 2016-05-21
    • 1970-01-01
    相关资源
    最近更新 更多