Multithreading 软件线程与硬件线程

Multithreading 软件线程与硬件线程,multithreading,hardware,Multithreading,Hardware,软件线程、硬件线程和java线程之间有什么区别 软件线程、java线程和硬件线程是独立的还是相互依赖的? 我这样问是因为,我知道Java线程是在jvm(Java.exe)中的进程中创建的 这些不同的进程在不同的硬件线程上执行,这也是真的吗 软件线程是由操作系统管理的执行线程 硬件线程是某些处理器的一项功能,在某些情况下可以更好地利用处理器。它们可能暴露于/被操作系统视为附加内核(“超线程”) 在Java中,您创建的线程维护软件线程抽象,其中JVM是“操作系统”。JVM是否将Java线程映射到OS

软件线程、硬件线程和java线程之间有什么区别

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


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

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

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

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

硬件线程是物理CPU或内核。因此,一个4核CPU可以同时支持4个硬件线程-CPU实际上是同时做4件事

一个硬件线程可以运行多个软件线程。在现代操作系统中,这通常是通过时间切片来完成的——在操作系统调度另一个线程在该CPU上运行之前,每个线程都有几毫秒的时间来执行。由于操作系统在线程之间快速来回切换,因此看起来就像一个CPU同时执行多个任务,但实际上,一个内核仍然只运行一个硬件线程,在多个软件线程之间切换


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

我认为您错了。我从未听说过硬件线程(除非你指的是某些英特尔机器上的超线程)。每个进程都是程序的运行表示。线程是进程中的同步执行流。Java线程定义通过JVM映射到系统线程。Java过去有一个概念,现在已经不是这样了。

硬件线程可以被认为是CPU核心,尽管每个核心可以运行多个线程。大多数CPU都提到每个内核上可以运行多少线程(在linux上,lscpu命令给出了这个细节)。这些是可以并行使用的核心数


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

大多数新型昂贵芯片的每个核心都有多个硬件线程。超线程等技术已经存在了好几年了,并且非常普及。当然,我试图让讨论保持简单,而不是深入讨论特定cpu体系结构的细节,因为这是一个java问题。无论硬件线程是按处理器(不久前)实现的,还是按内核或超线程实现的,或者是其他提供硬件并行性的架构机制,软件线程和硬件线程之间的主要区别是相同的。对不起,有人能解释一下什么是“本机线程”吗在这个答案的上下文中是什么意思?它们指的是硬件线程还是软件线程,或者两者都指?本机线程由操作系统公开。硬件/软件线程和内核/用户级线程之间有什么关系吗?它们是一样的吗?Inmos Transputer支持任意数量的线程,芯片是调度程序,不涉及操作系统。stackover flow请让我添加注释;)