gpt4 book ai didi

java - Java 多线程程序如何能够使用多个 CPU 内核?

转载 作者:太空狗 更新时间:2023-10-29 22:40:06 26 4
gpt4 key购买 nike

有人可以解释一下当 JVM 只是 linux 上的单进程时,Java 多线程程序(例如 Tomcat servlet 容器)如何能够使用 CPU 的所有内核吗?是否有详细描述该主题的深入文章?

编辑 #1:我不是在寻找如何在 Java 中实现多线程程序的建议。我正在寻找有关 JVM 如何在内部设法在 linux/windows 上使用多个内核同时在操作系统上仍然是单个进程的解释。

编辑 #2:我设法找到的最佳解释是 Hotspot (Sun/Oracle JVM) 使用 NPTL 在 Linux 上将线程实现为 native 线程。所以 Java 中的 more less 每个线程在 Linux 上都是轻量级进程(native thread)。使用 ps -eLf 命令可以清楚地看到,该命令不仅打印出进程 ID (PPID),还打印出 native 线程 ID (LWP)。

更多详细信息也可以在这里找到:

编辑#3:维基百科有一些关于 NPTL 的简短但很好的条目以及一些进一步的引用 http://en.wikipedia.org/wiki/Native_POSIX_Thread_Library

最佳答案

Linux 内核支持线程作为一等公民。事实上,对于内核而言,线程与进程并没有太大区别,只是它与另一个线程/进程共享一个地址空间。

一些旧版本的 ps 甚至默认为每个线程显示一个单独的进程,新版本可以使用 -m 标志启用此行为。

关于java - Java 多线程程序如何能够使用多个 CPU 内核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5622373/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com