【发布时间】:2011-08-03 02:28:30
【问题描述】:
当JVM在Linux上只是一个进程时,有人可以解释一下Java多线程程序(例如Tomcat servlet容器)如何能够使用CPU的所有内核吗?有没有好的深入的文章详细描述了这个主题?
编辑#1:我不是在寻找如何在 Java 中实现多线程程序的建议。我正在寻找有关 JVM 如何在内部设法在 linux/windows 上使用多个内核同时仍然是操作系统上的单个进程的解释。
EDIT #2:我设法找到的最佳解释是 Hotspot (Sun/Oracle JVM) 使用 NPTL 在 Linux 上将线程实现为本机线程。所以更不用说Java中的每个线程都是Linux上的轻量级进程(本机线程)。使用ps -eLf 命令可以清楚地看到它不仅打印出进程ID(PPID),还打印出本机线程ID(LWP)。
更多细节也可以在这里找到:
- http://www.velocityreviews.com/forums/t499841-java-5-threads-in-linux.html
- Distinguishing between Java threads and OS threads?
编辑#3:维基百科在 NPTL 上有简短但不错的条目,并有一些进一步的参考 http://en.wikipedia.org/wiki/Native_POSIX_Thread_Library
【问题讨论】:
-
我想你可能对“绿色线程”感到困惑,这是一种旧的黑客技术,用于支持没有操作系统线程支持的线程。虽然今天可能有类似的黑客攻击,但大多数操作系统都很好地支持线程。
-
操作系统做真正的工作,Java 只是以与大多数其他多线程应用程序相同的方式使用它。
标签: java multithreading jvm