multithreading - JVM线程与tomcat线程有何不同,它们是否有一个映射到内核线程的公共(public)池

标签 multithreading tomcat operating-system jvm kernel

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

从头开始,

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

  2. JVM 线程和tomcat 线程映射到内核线程以便执行。是否有一些通用的线程池可以从中创建 JVM 线程和 tomcat 线程?如果是这样,对此有何限制。

  3. 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/

相关文章:

c# - ThreadPool 线程执行 I/O 操作 - 线程可以在等待时重用吗?

multithreading - 内置多线程支持是什么意思?

oracle - mod_jk 给出错误的网关

java.lang.NullPointerException 仅在文件修改后在本地部署

java 不同进程间的wait-notify机制

java - ForkJoinWorkerThread的特点和优点

java - 在 Tomcat 8.0 中启用 CORS 响应过滤器

c - 为什么这个程序分配了8页,但只能容纳2048个8字节的节点?

networking - 网络端口如何工作?(操作系统)

c - 如何将环境变量从 child 传递给 parent ?