multithreading - 多线程模型之间的差异

标签 multithreading linux-kernel operating-system kernel

  1. 多对一模型
  2. 一对一模型
  3. 多对多模型

每个模型的优缺点?

你能举个例子吗?

EDIT:

有一件事让我对多对一模型感到困惑 我在引用这本书:

"Thread management is done by the thread library in user space, so it is efficient; but the entire process will block if a thread makes a blocking system call. Also, because only one thread can access the kernel at a time, multiple threads are unable to run in parallel on multiprocessors"

这是否意味着内核中的所有进程都将被阻塞,因为交换是由应用程序完成的,而不是由操作系统调度程序完成的。 (因为在这个模型中,我们在用户模式下管理线程)? 或者,只有属于进行阻塞系统调用的线程的同一进程的线程才会被阻塞?

提前致谢!

最佳答案

我们必须将用户级线程分配给内核级线程,基于此映射可以是:

  1. 一对一(一个用户线程映射到一个内核级线程)

  2. 多对一(多个用户级线程映射到一个内核级线程)

  3. 多对多(许多用户级线程映射到许多内核级线程)

这里内核级线程的数量通常设置为小于用户级线程的数量,因为内核级线程的管理成本要高得多,因为它涉及内核对其(内核级线程的)管理的干预。

由于这个原因,只有 “一对多”(一个用户级线程到多个内核级线程)到一个的第四个映射没有意义。

"线程管理由用户空间的线程库完成,效率高;但是如果一个线程进行阻塞系统调用,整个进程就会阻塞。另外,因为只有一个线程可以访问内核一次,多个线程无法在多处理器上并行运行”

这个例子可能有助于理解这一行:

enter image description here

这是否意味着内核中的所有进程都将被阻塞,因为交换是由应用程序完成的,而不是由操作系统调度程序完成的。 (因为在这个模型中,我们在用户模式下管理线程)?或者,只有属于进行阻塞系统调用的线程的同一进程的线程才会被阻塞?

一个进程的线程独立于其他进程的线程。因此只有属于进行阻塞系统调用的线程的同一进程的线程才会被阻塞。

我希望这对你有意义......

关于multithreading - 多线程模型之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38647621/

相关文章:

c++ - 在一个简单的 C++ 11 四线程程序中,如果我注释 stdout 打印行,我的两个消费者线程不会返回

gcc - 如何对 Linux 内核进行反优化以避免值(value)被优化掉

linux-kernel - 用于 ARM 的 Linux 中的矢量页面映射

linux - Hadoop:将 cgroups 用于 TaskTracker 任务

Python requests.get 持续超时大约一分钟,然后继续正常工作

python - 在python中启动多个线程

linux - 在Linux中,为什么所有进程都有一个global/dev/stdin文件?

c - 在三个管道之间传输消息

java - 我们如何从 SWING 应用程序打印文档

python - Python线程中的无限循环