【问题标题】:software threads vs hardware threads软件线程与硬件线程
【发布时间】:2011-08-01 09:19:41
【问题描述】:

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

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

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

【问题讨论】:

    标签: multithreading hardware


    【解决方案1】:

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

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

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

    【讨论】:

    • 大多数新的昂贵芯片每个内核都有多个硬件线程。超线程等技术已经问世好几年了,而且无处不在。
    • 当然,我试图让讨论保持简单,而不是深入了解特定 cpu 架构的细节,因为这是一个 java 问题。无论硬件线程是按处理器(不久前)、按内核还是按超线程实现的,还是按其他提供硬件并行性的架构机制实现,软件线程和硬件线程之间的主要区别是相同的。
    • 对不起,有人可以解释一下这个答案中“本机线程”的含义吗?它们是指硬件线程还是软件线程或两者兼而有之?
    • 本机线程被操作系统公开。与 green threads 不同,后者只是由用户程序模拟。
    • 硬件/软件线程和内核/用户级线程之间有什么关系吗?它们是一样的吗?
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • Inmos 晶片机支持任意数量的线程,芯片是调度器,不涉及操作系统。
        • stackover 流程​​让我添加评论 ;)
        • 您对 java 线程的贡献很有帮助。不过,您关于硬件线程的 cmets 似乎不准确。软件能够请求比“可用”更多的线程(这些是软件线程)。 “可用”是指 CPU 作为功能提供的任何内容,例如超线程 4 核机器,8 个线程(这些是硬件线程)。通常不希望超过硬件线程的数量太多。基本上,您需要一些 CPU 内核来在一天结束时运行线程。软件线程与硬件线程密切相关
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-27
        相关资源
        最近更新 更多