软件线程与硬件线程


75

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

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

这些不同的进程是在不同的硬件线程上执行的吗?

Answers:


65

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

硬件线程是某些处理器的功能,可以在某些情况下更好地利用处理器。它们可能作为附加核心(“超线程”)暴露给操作系统/由操作系统暴露。

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


76

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

一个硬件线程可以运行许多软件线程。在现代操作系统中,这通常是通过时间分片来完成的-在操作系统调度另一个线程在该CPU上运行之前,每个线程需要执行几毫秒的时间才能执行。由于OS快速来回切换线程之间,它看起来就好像一个CPU同时做多件事情,但在现实中,核心仍在运行只有一个硬件线程,其中许多软件线程之间进行切换。

现代JVM将Java线程直接映射到操作系统提供的本地线程,因此Java线程与本地线程之间没有固有的开销。对于硬件线程,如果有足够的内核,则操作系统会尝试将线程映射到内核。因此,如果您有一个启动4个线程并具有4个或更多内核的java程序,那么如果这4个线程处于空闲状态,则很有可能在4个独立的内核上真正地并行运行。


16
大多数昂贵的新芯片每个内核都有多个硬件线程。现在,超线程技术已经存在了相当的几年,并且非常普遍。
威尔

6
当然,我试图使讨论保持简单,而不是详细介绍特定的cpu架构,因为这是一个Java问题。无论是按处理器(不是不久前),按内核还是按超线程来实现硬件线程,还是要提供硬件并行性的某种其他体系结构机制来实现,软件线程和硬件线程之间的主要区别都是相同的。
mdma 2011年

抱歉,但是有人可以在这个答案中解释“本地线程”的含义吗?它们是指硬件线程还是软件线程,或者两者都指?
rgbk21 '20

本地线程由操作系统公开。与仅由用户程序模拟的绿色线程相反。
安东尼奥

2

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

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


-4

我想你错了。我从未听说过硬件线程(除非您是指某些intel机器上的超线程)。每个进程都是程序的运行表示。线程是进程中的同时执行流。Java线程定义由JVM映射到系统线程。Java过去具有GreenThreads的概念,现在不再如此。


1
Inmos晶片机支持任何数量的线程,芯片是调度程序,不涉及操作系统。
bazza,

stackover flow让我添加评论;)
Claude
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.