多对多模型将多个用户级线程多路复用到少量或者等量的内核线程上。内核线程的数量可能与特定应用程序或特定机器有关(位于多核处理器上的应用程序可以比单核处理器上分配更多数量的内核线程)。

虽然多对一模型允许开发人员按照她的意愿创建任意多的用户线程,但它不会导致真正的并发性,因为内核一次只能调度一个线程。一对一模型允许更大的并发性,但是开发人员必须小心,不要在应用程序中创建太多的线程(在某些情况下,可能会限制她创建的线程的数量)。多对多模型没有这些缺点: 开发人员可以根据需要创建许多用户线程,并且其相应的内核线程可以在多处理器上并行运行。另外,当线程执行阻塞的系统调用时,内核可以调度另一个线程执行。

多对多模型的一个变体仍然是将许多用户级线程多路复用到较小或相等数量的内核线程,但也允许将一个用户级线程绑定到一个内核线程。这种变体有时被称为两级模型(图4.8)。Solaris操作系统在Solaris 9版本之前支持两级模型。然而,从Solaris 9开始,这个系统使用一对一模型。

虽然多对多模型似乎是所讨论的模型中最灵活的,但是在实践中很难实现。此外,随着在大多数系统上出现越来越多的处理核心,限制内核线程的数量变得不那么重要了。因此,大多数操作系统现在都使用一对一模型。但是,正如我们在第4.5节中看到的,一些当代并发库让开发人员标识任务,然后使用多对多模型将这些任务映射到线程。

results matching ""

    No results matching ""