首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多线程模型的差异

多线程模型的差异
EN

Stack Overflow用户
提问于 2016-07-28 22:16:13
回答 2查看 3.1K关注 0票数 3
  1. 多对一模型
  2. 一对一模型
  3. 多对多模型

每种型号的优缺点?

你能举个例子吗?

代码语言:javascript
复制
EDIT:

有一件事让我和我引用的多对一模型混淆了:

线程管理是由线程库在用户空间完成的,因此是有效的;但是,如果线程进行阻塞系统调用,则整个进程将被阻塞。此外,由于一次只能访问一个线程,所以多个线程无法在多处理器上并行运行

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

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-29 10:54:43

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

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

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

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

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

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

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

一个进程的线程独立于其他进程的threads.So,只有属于执行阻塞系统调用的线程的同一个进程的线程才会被阻塞。

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

票数 7
EN

Stack Overflow用户

发布于 2016-07-29 03:19:23

我能看出你的问题。你有一本可怕的书。

你在问一些相关的问题。首先,有两种实现线程的通用方法。

1)线程在库中使用计时器实现。在调度执行进程的系统中,这是执行线程的唯一方法。在过去的日子里,这是做线程的唯一方法。这个系统通常被称为“用户线程”。用户线程在进程中被复用。该进程对自己的线程进行调度。

与“内核线程”(下面)相比,“用户线程”的神秘优势在于它们更有效率。这就是你引用的文章所指的。“如果线程进行阻塞系统调用,整个进程将被阻塞”的语句仅在某些unix系统上是正确的。

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

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

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

-=-

一对一、多对一、多对多的模式对学生来说是一种不必要的混乱。现在我们必须进入重叠的术语。

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

如果操作系统创建了线程(内核线程),理论上让我们将正在执行的内容称为“用户线程”。每个用户线程映射到/仅在一个内核线程中执行。这就是一对一的模式。

多对一模型与通常所说的“用户线程模型”相同。

这个术语开始变得毫无意义,因为只有一个线程,但我们称它为映射到内核线程的用户线程。

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

最后,我们讨论了多到多模型。这是理论上的BS。理论上,可以有许多用户线程映射到许多内核线程。换句话说,一个用户线程可以在不同的内核线程中执行。我从未听说过以这种方式实现线程的系统,我无法想象这种系统有什么实际的好处。

-=-

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

这种阻塞并不发生在所有的系统中(这是OS教科书应该指出的)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38647621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档