Multithreading 为什么多对多线程模型没有在更多的应用程序中使用

Multithreading 为什么多对多线程模型没有在更多的应用程序中使用,multithreading,operating-system,kernel,Multithreading,Operating System,Kernel,《操作系统概念》一书讨论了各种多线程模块(第4.3节),它提到了一对一模型在大多数操作系统中使用;Linux、Windows等。但是,它接着谈到了多对多模型,并修复了一对一模型中出现的一些问题,但后来提到,它唯一广泛使用的实现是两级模型,这只是旧版本Solaris(9)中使用的多对多模型的扩展但现在已不再使用,取而代之的是一对一模式。我的问题是,如果多对多模型更好,那么为什么不更普遍地使用它?是因为复杂性吗?我可以想象,如果用户级线程和内核级线程之间没有某种“粘性”映射,那么上下文切换可能会出现

《操作系统概念》一书讨论了各种多线程模块(第4.3节),它提到了一对一模型在大多数操作系统中使用;Linux、Windows等。但是,它接着谈到了多对多模型,并修复了一对一模型中出现的一些问题,但后来提到,它唯一广泛使用的实现是两级模型,这只是旧版本Solaris(9)中使用的多对多模型的扩展但现在已不再使用,取而代之的是一对一模式。我的问题是,如果多对多模型更好,那么为什么不更普遍地使用它?是因为复杂性吗?我可以想象,如果用户级线程和内核级线程之间没有某种“粘性”映射,那么上下文切换可能会出现问题

感谢您的帮助。

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

Go例程是一种编程模型,它意味着非常便宜,以至于Go程序不应该为拥有数千个例程而感到羞耻。Go运行时非常小心地保留了一个虚拟cpu池(由真实线程构建),可以非常快速地采用Go例程;go中的go例程正是这样,由go运行时管理。随着内核内存变得更便宜(因为内存变得更便宜)和pthreads的使用变得无处不在,管理两级模型的运行时成本和支持它的人工时间成本意味着它的消亡

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