我正在研究线程和多线程概念,并遇到了不同类型的线程:
有人能澄清这些类型的线程之间的区别(我很困惑)吗?
谢谢
发布于 2022-01-14 13:32:17
发布于 2022-01-14 09:31:00
硬件线程允许您实际并行地运行事物(这与并发不一样)。这些与CPU内核的数量相关(与超线程等细微差别相关,这可以使核心数量增加一倍)。
上面是OS (内核)线程。它是由您的操作系统提供的抽象。操作系统将把它们映射到硬件线程。它通过内部调度程序来实现这一点,我们对此几乎没有控制。请注意,理论上可能有任意多个OS线程(如果没有足够的内核来处理它们,他们只是在等待CPU),尽管所谓上下文切换的代价限制在几千个甚至更多。
用户线程(a.k.a.绿色线程、协同器等--它们有许多名称--是软件(例如编程语言及其运行时)提供的一种抽象。它们运行在OS线程之上,并通过内部(但在用户空间)调度器映射到它们。它们往往比OS线程执行得更好(特别是与i/o绑定的任务),因为它们具有较低的上下文切换开销,而且它们可以利用异步apis (例如,非阻塞套接字),而无需生成OS线程(这也很昂贵)。因为它们是轻量级的,所以你可以产生很多它们。有些人声称一次运行数百万这样的线程。我见过数以万计的人没有问题。
不过,我从未见过“软件线程”这个词。但取决于上下文,它意味着用户线程或内核线程。不太可能还意味着什么。
顺便说一句,没有一些操作系统支持,任何真正的代码都无法运行。它可以是有限的,例如,如果您不希望事物并行运行。但是,只要您想要真正的并行性,就无法逃避OS线程。用户线程的内部调度程序必须生成OS线程,并以某种方式将用户线程映射到它们。尽管通常情况下,它是一个不可见的实现细节。
https://stackoverflow.com/questions/70708319
复制相似问题