多线程模型之间的差异

时间:2016-07-28 22:16:14

标签: multithreading linux-kernel operating-system kernel

  1. 多对一模式
  2. 一对一模式
  3. 多对多模型
  4. 每种型号的优点和缺点?

    你能举个例子吗?

    EDIT:
    

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

      

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

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

    提前致谢!

3 个答案:

答案 0 :(得分:6)

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

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

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

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

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

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

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

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

    enter image description here

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

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

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

答案 1 :(得分:2)

我可以看到你的问题。你有一本可怕的书。

您正在询问几个相关问题。首先,有两种通用的方法来实现线程。

1)使用计时器在库中实现线程。在计划执行过程的系统中,这是执行线程的唯一方法。这是在奥尔德时代做线程的唯一方法。这个系统通常被称为用户线程。"用户线程在进程内多路复用。该过程会调度自己的线程。

"用户线程的神话优势" over"内核线程" (下面)是他们更有效率。这就是你引用的段落所指的内容。声明"整个过程将阻止一个线程进行阻塞系统调用"只适用于某些[unix]系统。

2)线程在操作系统中实现。进程由地址空间和一个或多个线程组成。操作系统内核调度THREADS以执行而不是PROCESSES。这些是内核线程。

请注意,即使系统支持内核线程,进程也可以使用用户线程。这两者并不相互排斥。但是,本机不支持内核线程的系统只能使用用户线程。

这是解释不同线程模型的简单方法。

- = - = - = - = - = - = - = - = - = - = - = -

一对一,多对一,多对多模式对学生来说是一种不必要的困惑。现在我们必须重叠术语。

让我们改变术语。对于#1,而不是调用可调度执行单元" process"我们称之为内核线程。"此模型中每个进程只能有一个内核线程。然后,进程中的线程是"用户线程。"在/内执行的任意数量的用户线程都映射到内核线程。这就是多对一模型。用户线程=多对一。

如果我们让操作系统创建线程(内核线程),那么让我们理论上调用正在执行的用户线程。"每个用户线程映射到一个且仅在一个内核线程中执行/执行。这是一对一的模式。

多对一模型与通常称为"用户线程模型相同。"

术语开始变得荒谬,因为只有一个线程,但我们称之为映射到内核线程的用户线程。

一对一模型通常称为内核线程模型。

最后,我们讨论了多对多模型。这是理论学士学位。理论上,可能有许多用户线程映射到许多内核线程。换句话说,单个用户线程可以在不同的内核线程中执行。我从未听说过系统以这种方式实现线程,我无法想象这样一个系统有任何实际的优势。

- = - = - = - = - = - = - = - = - = - = - = - = -

关于你的上一个问题,在某些操作系统中,阻塞系统调用块也会阻塞用于实现用户线程的定时器(a / k / a多对一)。如果一个线程进行阻塞调用,它将阻止PROCESS中的所有其他线程执行,直到阻塞调用完成。

这种阻止不会发生在所有系统中(操作系统教科书应指出的内容)。

答案 2 :(得分:0)

多线程模型之间的区别

有3种型号

  • 一对一
  • 多对一
  • 多对多

一对一

  • 每个用户级线程映射到内核线程
  • 管理一对一模型更为重要, 涉及更多开销并降低系统速度
  • 此模型的大多数实现都对如何 可以创建很多线程

    enter image description here

多对一

  • 将许多用户级别的线程映射到一个内核级别的线程
  • 线程管理在用户空间中完成
  • 当线程进行阻塞系统调用时,整个 过程将被阻止
  • 一次只有一个线程可以访问内核,因此 多个线程无法并行运行 多处理器

    Many-to-One Model

多对多

  • 允许将许多用户级别的线程映射到许多 内核线程
  • 允许 创建足够的操作系统 内核线程数
  • 进程可以拆分为多个处理器

    enter image description here