据我了解,在多对一映射中,一个内核线程管理多个用户线程。这个内核线程帮助用户线程进行系统调用等。我不明白的是:
- 如果单个阻塞调用可以,为什么我们要有多对一映射 阻止内核线程管理的所有用户线程?
- 在用户线程到内核线程的多对一映射中,执行所有 用户线程必须来自同一进程?
- 在多对一的映射中,所有的用户线程可以运行在不同的 核心/CPU 一次运行还是一次只运行其中一个?
最佳答案
1) Why do we have many-to-one mapping if a single blocking call would block all user threads managed by the kernel thread?
具有一对一映射的缺点是当线程之间存在上下文切换时内核会参与其中。内核的参与会导致一些开销。
2)In many-to-one mapping of user threads to a kernel thread, do all the user threads have to be from the same process?
是
3)In many-to-one mapping, can all the user threads be run on different cores/CPUs at once or is only one of them run at a time?
具有多对一映射的专业特性是整个线程上下文切换由您使用的用户级线程库维护,就内核而言,它不知道您拥有多少线程进程有一个时间片来执行,线程库将控制权交给任何线程。由此,您可以很容易地看出,在多对一映射中,在任何时刻只有进程的一个线程可以获得控制权。
关于linux - 用户线程到内核线程的多对一映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33558480/