用户空间中实现的线程库是否支持超线程?

时间:2014-08-19 20:15:19

标签: c multithreading

假设具有OS的多处理器体系结构可能支持或不支持内核级线程

纠正我出错的地方:

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

1 个答案:

答案 0 :(得分:1)

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

推论1取决于OS调度程序。调度可以仅基于线程,而不是进程,因此没有固有的保证,具有不同线程数的进程获得相同的总时间。

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