软件线程与硬件线程

时间:2011-04-08 09:48:16

标签: multithreading hardware

软件线程,硬件线程和Java线程之间有什么区别?

软件线程,Java线程和硬件线程是独立的还是相互依赖的? 我问这个是因为,我知道Java线程是在jvm(java.exe)中的进程内创建的。

这些不同的进程是否在不同的硬件线程上执行也是如此?

4 个答案:

答案 0 :(得分:49)

“硬件线程”是物理CPU或核心。因此,4核CPU可以 真正 同时支持4个硬件线程 - CPU实际上同时做了4件事。

一个硬件线程可以运行许多软件线程。在现代操作系统中,这通常通过时间切片来完成 - 每个线程在操作系统调度另一个线程以在该CPU上运行之前执行几毫秒。由于操作系统在线程之间快速切换, 出现 ,好像一个CPU同时执行多个操作,但实际上,核心仍在运行只有一个硬件线程,它在许多软件线程之间切换。

现代JVM将java线程直接映射到操作系统提供的本机线程,因此java线程与本机线程不会产生固有的开销。对于硬件线程,如果有足够的内核,操作系统会尝试将线程映射到内核。因此,如果你有一个启动4个线程的java程序,并且有4个或更多核心,那么如果核心处于空闲状态,你的4个线程很可能会在4个独立的核心上并行运行。

答案 1 :(得分:47)

软件线程是由操作系统管理的执行线程。

硬件线程是某些处理器的一项功能,可以在某些情况下更好地利用处理器。它们可能会被操作系统暴露,因为它们似乎是额外的核心(“超线程”)。

在Java中,您创建的线程维护软件线程抽象,其中JVM是“操作系统”。 JVM是否将Java线程映射到OS线程是JVM的业务(但几乎可以肯定)。如果可用,操作系统将使用硬件线程。

答案 2 :(得分:2)

可以将硬件线程视为CPU内核,尽管每个内核可以运行多个线程。大多数CPU提到每个内核可以运行多少个线程(在Linux上,lscpu命令提供了此详细信息)。这些是可以并行使用的内核数。

软件线程是对硬件的抽象,可以进行多处理。如果您有多个软件线程但没有多个资源,则这些软件线程是一种通过在有限的时间内分配资源(或使用其他策略)来并行运行所有任务的方法,以使所有线程看起来都在并行运行。这些由操作系统管理。 Java线程是JVM级别的抽象。

答案 3 :(得分:-3)

我认为你错了。我从来没有听说过硬件线程(除非你的意思是某些英特尔机器上的超线程)。每个进程都是程序的运行表示。线程是在进程中同时执行的流程。 Java线程定义由JVM映射到系统线程。 Java曾经有GreenThreads的概念,现在已经不再适用了。