linux - 用户线程到内核线程的多对一映射

标签 linux multithreading process linux-kernel operating-system

据我了解,在多对一映射中,一个内核线程管理多个用户线程。这个内核线程帮助用户线程进行系统调用等。我不明白的是:

  1. 如果单个阻塞调用可以,为什么我们要有多对一映射 阻止内核线程管理的所有用户线程?
  2. 在用户线程到内核线程的多对一映射中,执行所有 用户线程必须来自同一进程?
  3. 在多对一的映射中,所有的用户线程可以运行在不同的 核心/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/

相关文章:

linux - 需要 Linux 命令行应用程序来比较二进制文件并在第一次不匹配时退出

linux - LAMP 服务器上带有 Jetty 的 Solr - 管理页面访问问题

c++ - std::lock_guard 和 #pragma omp critical 之间的区别

java - 寻找一种方法来停止/杀死线程

python - python2.4中加载库(lib*.so)文件

java - 是否可以在 JAVA 中运行 HADOOP 并将文件从本地 fs 复制到 HDFS 但无需在文件系统上安装 Hadoop?

c - Windows API STARTUPINFO 被破坏?

Windows进程和。应用程序

python - 从脚本运行服务器后 Tkinter 窗口卡住

c# - 从 Process.Start C# 隐藏控制台窗口