multithreading - 操作系统中多对多模型的问题

标签 multithreading operating-system many-to-many threadpool one-to-one

我已经阅读了“Abraham Silberschatz”所著的《操作系统中的多对多模型》一书。第 4 章中说

“Solaris 操作系统在早于 Solaris 9 的版本中支持多对多模型。但是, 从Solaris 9开始,该系统使用一对一模型。”

我的问题如下。 可能是书中提到的答案,我无法理解,我也在互联网上搜索,但找不到有用的信息,为什么会发生转变?

  1. 多对多模型存在哪些问题?
  2. 为什么会发生从多对多模型到一对一模型的转变?

最佳答案

我只研究过实现所谓的一对一模型的系统。恕我直言,这种一对一/多对多/多对一的分类是有误导性的。

这里的建议是,在“一对一模型”中,每个线程实际上创建两个线程:一个内核模式线程和一个用户模式线程。实际上,所有这些都需要一个可以在用户模式和内核模式下运行的单个线程(即内核模式堆栈)。

可以在内核模式和用户模式(也可能是其他模式,也称为一对一模型)下运行的线程的优点是线程可以完全独立地运行并且可能更容易实现。每个线程都可以进入内核模式(例如执行 I/O),而不会阻塞任何其他线程。所谓的缺点是,这要求每个线程都有自己的内核模式堆栈。

再说一次,我没有在多对一或多对多系统上工作过,但我怀疑这些系统不是使用单独的内核模式线程实现的,而是使用由多个线程共享的内核模式数据结构实现的.

what are the issues with many to many model?

多对多和多对一的明显缺点是内核模式成为一种资源,其不可用可能导致一组线程阻塞另一组线程。

假设您有 3 个内核模式“线程”和 10 个用户模式线程。如果 4 个用户模式线程尝试同时执行 I/O,则第 4 个线程将阻塞,直到前三个线程之一完成。

实现起来也更加复杂,因为您必须将内核模式“线程”作为资源进行管理。

Why shift occur from many to many model to one to one model?

我想不出一对多或多对多的任何实际优点,并且可以想到许多缺点(如上所述)。这可能就是发生转变的原因。

也就是说,恕我直言,这是解释线程的一种令人困惑的方式。

关于multithreading - 操作系统中多对多模型的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35538623/

相关文章:

python - 将参数传递给 paho mqtt 回调

multithreading - Kafka中的Worker Queue选项

process - 操作系统是一个进程吗?

java - Hibernate 标准 - 多对多关系

c++ - 使用 Informix 和 IBM CSDK 的多线程

ios - 获取主队列 block 未在主线程上执行

java - 断电期间文件操作如何执行

c - c中信号处理函数的签名

mysql - 用于多对多关系统计分析的SQL数据库设计

django - Many_init 恰好需要 1 个参数(给定 3 个参数) django Rest Framework