假设一个多处理器架构,其操作系统可能支持也可能不支持内核级线程
纠正我错误的地方:
- 如果线程库完全在用户空间中实现,则线程的管理是在用户空间中完成的(创建、线程表、堆栈信息等)。
- 因此,即使一个进程可能有多个用户线程,内核也只能看到 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/