multithreading - 为什么多对多线程模型不被更多使用
问题描述
《操作系统概念》一书讨论了各种多线程模块(第 4.3 节),它提到在大多数操作系统中都使用一对一模型;Linux、Windows 等。然而,它随后谈到了多对多模型,并修复了一对一模型中出现的一些问题,但后来提到它唯一大量使用的实现与两级模型一起使用,它只是多对多模型的扩展,该模型在旧版本的 Solaris (9) 中使用,但现在不再使用,已被一对一模型取代. 我的问题是如果多对多模型更好,那么为什么不更常用呢?是因为复杂吗?我可以想象如果没有某种“粘性”,上下文切换可能会出现问题
感谢您对此的任何帮助。
解决方案
它被使用;Go中的 goroutine 正是这样,由 Go 运行时管理。随着内核内存变得更便宜(因为内存变得更便宜)和 pthreads 的使用变得无处不在,管理二级模型的运行时成本以及支持它的人力时间成本意味着它的消亡。
Go 例程是一种编程模型,并且意味着非常便宜,以至于 Go 程序不应该为拥有数千个例程而感到羞耻。Go 运行时非常小心地保留了一个虚拟 CPU 池(由真实线程构建),它可以非常快速地采用 Go 例程。
推荐阅读
- r - 找出每个因子之间的不同值并在 r 中绘制直方图
- amazon-web-services - 使用 AWS SES 发送电子邮件错误“TypeError: 'str' object is not callable”
- c++ - C++中数字的分解
- javascript - div的CSS边框半径:首次加载时伪元素渲染错误
- mysql - 使用 Scala Slick 从 SQL 数据库中检索时间戳列中的日期在上个月或上周的所有记录
- montecarlo - 如何将 M/M/1 排队系统修改为 G/G/1?
- javascript - 使用 mongodb-memory-server 和 mongoose 创建内存数据库
- firebase - 添加目标后,Firebase 部署时出现 404 错误
- python - llvmlite 中的有符号/无符号 int 类型
- reactjs - ReactJS:处理多个复选框