用户线程、内核线程、软件线程和硬件线程

问题描述 投票:0回答:2

我正在研究线程和多线程概念,并且遇到了不同类型的线程:

  1. 用户线程:支持在内核之上,无需内核进行管理。
  2. 内核线程:由操作系统直接支持和管理。
  3. 软件线程:由操作系统管理的执行线程。
  4. 硬件线程:某些处理器的一项功能,可以在某些情况下更好地利用处理器。

任何人都可以澄清这些类型的线程之间的区别(我很困惑)?

谢谢

multithreading
2个回答
5
投票

硬件线程允许您实际并行运行事物(这与并发不同)。这些对应于 CPU 核心的数量(具有诸如超线程之类的细微差别,可以使核心数量增加一倍)。

最重要的是操作系统(内核)线程。它是操作系统提供的抽象。操作系统会将它们映射到硬件线程。它通过内部调度程序来完成此操作,我们对此几乎没有控制权。请注意,理论上可能有任意多个操作系统线程(如果没有足够的内核来处理它们,它们只是等待 CPU),尽管所谓的上下文切换的价格将其限制在几千甚至更多。

用户线程(又名绿色线程、协程等,它们有很多名称)是由您的软件(例如编程语言及其运行时)提供的抽象。它们在操作系统线程之上运行,并通过内部(但在用户空间中)调度程序映射到它们。它们往往比操作系统线程(尤其是 I/O 绑定任务)执行得更好,因为它们具有较低的上下文切换开销,而且它们可以利用异步 api(例如非阻塞套接字),而无需生成操作系统线程(这也很昂贵)。由于它们很轻,因此您可以生成很多它们。有些人声称一次运行数百万个这样的线程。我个人见过数以万计没有问题的。

不过我从未见过“软件线程”这个术语。但根据上下文,它意味着用户线程或内核线程。不太可能有其他意思。

顺便说一句,如果没有某些操作系统支持,任何真正的代码都无法运行。例如,如果您不希望事情并行运行,它可能会受到限制。但是,一旦您想要真正的并行性,操作系统线程就无法逃脱。用户线程的内部调度程序必须生成操作系统线程并以某种方式将用户线程映射到它们。尽管通常它是一个不可见的实现细节。


1
投票

“硬件线程”是一个坏名字。它被 CPU 设计者选为艺术术语,而没有太多考虑软件开发人员对“线程”的理解。

当操作系统中断正在运行的线程以便其他线程可以使用 CPU 时,它必须保存足够的 CPU 状态,以便稍后可以再次恢复该线程。保存的状态主要由程序计数器、堆栈指针和其他 CPU 寄存器组成,这些寄存器是 CPU 程序员模型的一部分。

所谓的“

超线程CPU”具有两组或更多完整的寄存器组。这使得它可以代表两个或多个程序线程执行指令,而无需操作系统干预。

该领域的专家喜欢事物的好听、简短的名称。他们没有谈论“完整的上下文寄存器集”,而是将其称为“硬件线程”。

© www.soinside.com 2019 - 2024. All rights reserved.