2013-11-20 106 views
0

我在研究操作系统概念时学到了两种类型的线程:内核级和用户级。可以在多处理器环境中执行Java线程吗?

我还了解到,内核级线程或进程也可以在多处理器环境中执行。

我对Java线程(作为用户级线程)有基本的疑问, 我们可以使用它们在多处理器环境中执行吗?

+1

使用fork-join框架来处理多处理器。 – Masudul

回答

0

首先答案是肯定的。您可以通过在java中创建多个线程来利用多核处理器的全部功能。

据我所知,jvm采用了混合线程模型,包括内核线程和用户线程。它有一个策略来决定何时创建哪种类型的线程。我相信当系统资源丰富时,它往往会创建内核线程并分配java线程对象来运行它。

0

听起来像你谈论的是好的旧Java 1.1“绿色线程”。这是操作系统没有本地线程支持或至少没有稳定的支持的一大困惑。至少在讨论Oracle的参考实现时,此功能在当前的JVM实现中不再存在。 Java线程始终是这些JVM上的内核线程。

所以答案是肯定的,Java线程将受益于SMP,即多核CPU。它要求操作系统具有本地线程实现,但如果没有它,整个SMP计算机就没有多大意义。 JVM必须能够使用它,在所有常见系统中都是如此。

+0

但是多处理依赖于内核,而且随着操作系统概念说内核不知道用户级线程,所以它如何识别多个处理器上的调度Java线程呢? – Winn

+0

这不是用户级别的线程。再次阅读我的答案:“Java线程始终是这些JVM上的内核线程”。 – Holger

+0

可能我不是很快捕捉到你,但是JVM进程知道java线程是内核级线程,但我的问题是原始操作系统内核如何知道它?因为调度决策仅由原始内核调度程序进行。不是吗? – Winn

相关问题