在用户空间实现的线程库可以支持超线程吗?

标签 c multithreading

假设一个多处理器架构,其操作系统可能支持也可能不支持内核级线程

纠正我错误的地方:

  • 如果线程库完全在用户空间中实现,则线程的管理是在用户空间中完成的(创建、线程表、堆栈信息等)。
  • 因此,即使一个进程可能有多个用户线程,内核也只能看到 1 个单内核线程进程。
  • 因此,内核调度程序将CPU使用时间分配给整个进程;用户空间线程库负责在其用户线程之间对 CPU 时间进行时间切片。
  • (推论 1)具有 20 个用户线程的进程 A 将获得与具有 1 个用户线程的进程 B 相同的优先级,因此进程 A 中的线程大约获得线程的 1/20 CPU 时间进程B中
  • (推论 2)同一进程中的用户线程永远不会是超线程的(即 2 个线程同时在不同的 CPU 上执行)

最佳答案

您的前三个假设是正确的。

推论 1 取决于操作系统调度程序。调度只能基于线程,而不是进程,因此不能固有地保证具有不同线程数的进程获得相同的总时间。

许多用户空间调度程序采用混合路线,并将 m 个用户空间线程调度到 n 个操作系统线程(其中 m >> n) ,从而避免了操作系统线程创建的一些开销。如果不借助操作系统机制来引导并发,就不可能神奇地实现并发。

关于在用户空间实现的线程库可以支持超线程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25392222/

相关文章:

c - 为什么这段代码会出现段错误?

c - 如何在C中存储void的返回值?

c - 使用谓词指令将c转换为汇编语言

java - EE Web 服务中的线程安全

新线程中的 C# 计时器

c - 将 PCI 设备切换到 D3 冷 (D3cold) 状态

c - 对受我系统的字节序影响的单个整数感到恐惧

linux - 进程是否比线程慢

c# - Monotouch 线程、GC、WCF

c# - 如果并行任务抛出异常则取消任务