2015-11-06 361 views
-2

据我所知,在多对一映射中,一个内核线程管理许多用户线程。这个内核线程可以帮助用户线程使用系统调用等什么我不明白的是:用户线程与内核线程的多对一映射

  1. 为什么我们有很多一对一的映射,如果一个阻塞调用会 块中的所有用户线程由管理内核线程?
  2. 在用户线程与内核线程的多对一映射中,用户线程的所有 必须来自相同的进程吗?
  3. 在多对一映射中,所有用户线程可以同时运行在不同的内核/ CPU上,还是一次只能运行其中一个?
+0

Google搜索有什么问题?例如,[第四个参考](https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/4_Threads.html):'如果阻塞的系统调用被完成,那么整个过程阻塞''因为一个单个内核线程只能在单个CPU上运行,多对一模型不允许单个进程在多个CPU中拆分。 – Tsyvarev

+0

在投票回答问题之前,我建议你阅读所有的子问题,以确保你在谷歌或其他地方的某个地方有答案。仅供参考,我无法在Google上找到他们,因此发布在此处。另外,子问题有些相关。 – Viraj

+0

其实,[参考](https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/4_Threads.html)我提供了包含所有问题的答案:1.线程管理由线程处理用户空间中的库,这是非常有效的。 2.'多线程应用程序在单个进程中有多个线程,每个线程都有自己的程序计数器......'3.因为单个内核线程只能在单个CPU上运行......'。是的,细节的程度因不同的问题而有所不同,但这是因为你一次有几个细节。 – Tsyvarev

回答

2

1)为什么我们有很多一对一的映射,如果一个阻塞调用会 块中的所有用户线程内核线程管理?

当在线程之间有上下文切换时,具有一对一映射的缺点是内核参与。内核结果涉及几个开销。

2)在很多一对一的映射用户线程的内核线程,做所有 用户线程都从同一个进程?

3)在许多对一映射,可以将所有的用户线程对不同 核/ CPU上执行或仅它们中的一个在一个时间运行?

具有多对一映射的pro功能是整个线程上下文切换由您使用的用户级线程库维护,并且就内核而言,它不知道您有多少线程让它给进程一个时间片来执行,并由线程库来控制任何线程。由此可以很容易地看到,在多对一的映射中,只有一个线程可以获得控制权。

+0

这个问题每月大约出现一次。这是'为我做的所有工作':( –

+0

清除我所有的疑惑,谢谢。 – Viraj