Javamultithreading程序如何使用多个CPU内核?

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

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

编辑#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
  • 区分Java线程和OS线程?

编辑#3 :维基百科在NPTL上有简短但很好的条目,还有一些参考文献http://en.wikipedia.org/wiki/Native_POSIX_Thread_Library

Linux内核支持线程作为一等公民。 事实上,对于内核,线程与进程没有太大的不同,除了它与另一个线程/进程共享一个地址空间。

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

JVM是一个包含许multithreading的单个进程。 每个线程都可以在不同的CPU核心上进行调度。 单个进程可以有多个线程。

当在JVM内运行的Java软件要求另一个线程时,JVM启动另一个线程。

这就是JVM如何设法使用多个核心。

如果您使用并发库并尽可能多地拆分您的工作,JVM应该处理其余的工作。

看看这个http://embarcaderos.net/2011/01/23/parallel-processing-and-multi-core-utilization-with-java/

我将从阅读并发教程开始 。

特别是,它解释了进程和线程之间的差异(和关系)。

在我熟悉的体系结构中,线程(包括JVM创建的线程)由操作系统管理。 JVM只使用操作系统提供的线程function。