多线程模型之间的差异

Ton*_*ous 3 multithreading operating-system kernel linux-kernel

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

每种型号的优缺点?

你能给我举个例子吗 ?

EDIT:
Run Code Online (Sandbox Code Playgroud)

有一件事让我误解了我引用这本书的多对一模型:

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

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

提前致谢!

Rup*_*ngh 7

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

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

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

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

这里内核级线程的数量通常设置为小于用户级线程的数量,因为内核级线程的管理要昂贵得多,因为它涉及其(内核级线程)管理中的内核干预.

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

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

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

在此输入图像描述

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

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

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