有人请提供解释说明当JVM在Linux上只有单一进程时,Java多线程程序(例如Tomcat servlet容器)是否能够使用CPU的所有内核?是否有详细描述该主题的良好深度文章?Java多线程程序如何能够使用多个CPU内核?
编辑#1:我不是在寻找建议如何在Java中实现多线程程序。我正在寻找JVM内部如何管理在linux/windows上使用多个内核的解释,同时仍然是OS上的单个进程。我设法找到的最佳解释是Hotspot(Sun/Oracle JVM)在Linux上使用NPTL实现线程作为原生线程。因此,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
我想你可能这是一个老黑客以支持线程,而从操作系统的线程支持“绿色线程”相混淆。虽然今天可能会出现类似的黑客攻击,但大多数操作系统都支持线程。 – 2011-04-11 14:04:40
操作系统完成真正的工作,Java只是以与大多数其他多线程应用程序相同的方式使用它。 – 2011-04-11 16:35:35