将用户级线程映射到内核

时间:2019-02-06 03:35:20

标签: multithreading operating-system

是否可以将 1 个用户级线程映射到许多内核级线程,例如:将2个用户级线程映射到3个或更多内核级,并且答案是否定的?是是的。这如何以积极的方式改变性能

2 个答案:

答案 0 :(得分:0)

没有用户级线程之类的东西。这就是BS在操作系统上创建糟糕的教科书的全部过程。如果您有这样的书,请用它作为猫咪的衬纸。

线程要么由操作系统实现(糟糕的教科书称之为“内核线程”),要么由运行时库(用户线程)模拟-在这种情况下,它们甚至不应该成为操作系统课程的一部分,为了历史背景。

内核/用户线程的区别完全令人困惑。有时,糟糕的教科书谈论1对1以及多对一和多对多的模型会使情况变得更加混乱。

您所描述的内容永远不会在教科书领域之外发生。当实线程不可用时,可以使用实线程(内核),也可以使用模拟线程(用户)。如今这种情况很少见,因为您遇到的几乎每个操作系统都支持真实线程。

不幸的是,操作系统教科书采用了这样一个简单的概念并使之混乱。

答案 1 :(得分:0)

  

是否可以将1个用户级线程映射到许多内核级线程,例如:将2个用户级线程映射到3个或更多内核级,如果答案是肯定的。这如何以积极的方式改变性能

理论上一切皆有可能。问题是找到这样做的理由。

更具体地说,问题是找到一种分配给用户线程的附加内核线程可以是有益的方法(而不仅仅是浪费资源)。从理论上讲,我只能想到两种可能的情况。

第一种可能的情况是“可调宽度SIMD”,在这种情况下,仅分配一个内核线程时,一条指令可能同时处理N个数据,而一条指令(在M个内核线程上运行) M个CPU)在分配了M个内核线程时一次处理N * M个数据。

第二个可行的方案是冗余。例如,如果您将3个内核线程分配给一个用户线程,并比较每个内核线程的操作(例如,存储到内存);那么您就可以检测(并避免)某些硬件故障(例如,如果CPU出现故障,导致一个内核线程的行为与其他内核线程不同)。

请注意,这两种情况都需要专门设计的硬件来满足同步要求;对于传统的CPU(不支持同步要求),这一切都不可行/不可行。