首页 > 解决方案 > 为什么多对多线程模型不被更多使用

问题描述

《操作系统概念》一书讨论了各种多线程模块(第 4.3 节),它提到在大多数操作系统中都使用一对一模型;Linux、Windows 等。然而,它随后谈到了多对多模型,并修复了一对一模型中出现的一些问题,但后来提到它唯一大量使用的实现与两级模型一起使用,它只是多对多模型的扩展,该模型在旧版本的 Solaris (9) 中使用,但现在不再使用,已被一对一模型取代. 我的问题是如果多对多模型更好,那么为什么不更常用呢?是因为复杂吗?我可以想象如果没有某种“粘性”,上下文切换可能会出现问题

感谢您对此的任何帮助。

标签: multithreadingoperating-systemkernel

解决方案


它被使用;Go中的 goroutine 正是这样,由 Go 运行时管理。随着内核内存变得更便宜(因为内存变得更便宜)和 pthreads 的使用变得无处不在,管理二级模型的运行时成本以及支持它的人力时间成本意味着它的消亡。

Go 例程是一种编程模型,并且意味着非常便宜,以至于 Go 程序不应该为拥有数千个例程而感到羞耻。Go 运行时非常小心地保留了一个虚拟 CPU 池(由真实线程构建),它可以非常快速地采用 Go 例程。


推荐阅读