从这个答案 - 软件线程与硬件线程,软件线程是操作系统管理的线程。但我还学习了另一个术语,称为用户线程,这些线程不是内核线程,即操作系统不会知道这些线程。那么软件线程包括用户线程吗?
我没有从 stackoverflow 得到任何答案,但我认为这个想法在 Linux 的上下文中是相同的,我问的是 Linux 中使用的术语,谢谢。
作为参考,我找到了一个Quora 上的有用资源。
答案1
这是一个术语往往过多的领域——根据上下文,相同的术语具有不同的含义。与各种术语相关的含义通常会随着时间的推移而变化,这一事实无济于事,因此您正在阅读的文本的年代很重要。
有很多方面需要区分,或者至少有两个主要方面。
- 用户线程和内核线程可以引用执行上下文或管理上下文。 Linux 中的“内核线程”通常指的是前者:内核线程是在内核中运行的线程,用于内核的目的(在 中
ps
,您将看到它们作为名称在方括号中的进程,例如[kthreadd]
,[khugepaged]
...)。 - 正如 SO 答案中提到的,软件线程与硬件线程是指正在讨论的线程的性质。在这两种情况下,线程的概念都是并行运行多个执行线程的想法。从软件意义上来说,这是一个轻量级的过程;从硬件意义上来说,它是一个“轻量级”CPU(用英特尔的话说就是超线程)。
您所指的“用户线程”通常称为绿线。它们是在用户空间中管理的软件线程,没有内核参与。与在内核和用户空间中实现的许多概念一样,它们的使用随着成本感知的变化而随着时间的推移而发展:在过去,在其他操作系统上,内核不能很好地支持线程,因此它们被实现在用户空间;然后内核得到改进,软件开始使用内核线程;然后新的环境认为内核线程成本太高,事情就是这样。
为了回答您的问题,由于用户线程是软件线程,因此术语“软件线程”包括它们。