首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用户线程、内核线程、软件线程和硬件线程

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

Stack Overflow用户
提问于 2022-01-14 09:16:31
回答 2查看 263关注 0票数 1

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

  1. 用户线程:在内核之上支持,并且在没有内核的情况下被管理。
  2. 内核线程:由操作系统直接支持和管理。
  3. 软件线程:由操作系统管理的执行线程。
  4. 硬件线程:某些处理器的一个特性,允许在某些情况下更好地利用处理器。

有人能澄清这些类型的线程之间的区别(我很困惑)吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-14 13:32:17

“硬件线程”是个坏名字。CPU设计者选择它作为一个艺术术语,没有考虑软件开发人员认为“线程”意味着什么。

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

所谓的"超线程CPU“有两个或多个完整的寄存器集。这允许它代表两个或多个程序线程执行指令,而不需要操作系统干预。

这一领域的专家喜欢用好的、短的名字来形容事物。他们不再谈论“完整的上下文寄存器集”,而只是称之为“硬件线程”。

票数 1
EN

Stack Overflow用户

发布于 2022-01-14 09:31:00

硬件线程允许您实际并行地运行事物(这与并发不一样)。这些与CPU内核的数量相关(与超线程等细微差别相关,这可以使核心数量增加一倍)。

上面是OS (内核)线程。它是由您的操作系统提供的抽象。操作系统将把它们映射到硬件线程。它通过内部调度程序来实现这一点,我们对此几乎没有控制。请注意,理论上可能有任意多个OS线程(如果没有足够的内核来处理它们,他们只是在等待CPU),尽管所谓上下文切换的代价限制在几千个甚至更多。

用户线程(a.k.a.绿色线程、协同器等--它们有许多名称--是软件(例如编程语言及其运行时)提供的一种抽象。它们运行在OS线程之上,并通过内部(但在用户空间)调度器映射到它们。它们往往比OS线程执行得更好(特别是与i/o绑定的任务),因为它们具有较低的上下文切换开销,而且它们可以利用异步apis (例如,非阻塞套接字),而无需生成OS线程(这也很昂贵)。因为它们是轻量级的,所以你可以产生很多它们。有些人声称一次运行数百万这样的线程。我见过数以万计的人没有问题。

不过,我从未见过“软件线程”这个词。但取决于上下文,它意味着用户线程或内核线程。不太可能还意味着什么。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70708319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档