操作系统 多线程模型
在本文中,我们将了解操作系统中的多线程模型。
多线程模型
多线程允许应用程序将其任务分解为多个线程。在多线程中,同一进程或任务可以由多个线程完成,或者我们可以说在多线程中有多个线程来执行任务。通过使用多线程,可以实现多任务处理。
单线程系统的主要缺点是一次只能执行一个任务,所以为了克服这种单线程的缺点,有了多线程,它可以同时执行多个任务。
例如:
在上面的示例中,client1、client2和client3在不等待的情况下访问Web服务器。在多线程中,多个任务可以同时运行。
在操作系统中,线程被分为用户级线程和内核级线程。用户级线程在内核之上独立处理,并且可以在没有内核支持的情况下进行管理。另一方面,操作系统直接管理内核级线程。然而,用户级线程和内核级线程之间必须存在某种关联。
存在三种已建立的多线程模型用于分类这些关联:
- 多对一多线程模型
- 一对一多线程模型
- 多对多多线程模型
多对一多线程模型
多对一模型将多个用户级线程映射到一个内核线程。这种关联类型利于有效的上下文切换环境,即使在没有线程支持的简单内核上也可以轻松实现。
这种模型的缺点是,由于任何给定时间只有一个内核级线程进行调度,因此该模型无法利用多线程进程或多处理器系统提供的硬件加速。在这种模型中,所有的线程管理都是在用户空间完成的。如果发生阻塞,这个模型会阻塞整个系统。
在上图中,多对一模型将所有用户级线程连接到单个内核级线程。
一对一多线程模型
一对一模型将单个用户级线程映射到单个内核级线程。这种类型的关系有助于并行运行多个线程。然而,这种好处也带来了一些缺点。每个新用户线程的生成都必须包括创建一个对应的内核线程,这会导致额外的开销,可能影响父进程的性能。Windows系列和Linux操作系统尝试通过限制线程计数的增长来解决这个问题。
在上图中,一个模型将一个用户级线程关联到一个单独的内核级线程。
多对多模型多线程模型
在这种类型的模型中,有多个用户级线程和多个内核级线程。创建的内核线程数量取决于特定的应用程序。开发人员可以在两个级别创建任意数量的线程,但可能不同。多对多模型是其他两个模型之间的一种折衷方案。在此模型中,如果任何线程进行阻塞系统调用,内核可以调度另一个线程进行执行。此外,引入多个线程后,不像之前的模型那样存在复杂性。虽然该模型允许创建多个内核线程,但不能实现真正的并发。这是因为内核一次只能调度一个进程。
在上图中,多对多版本的多线程模型将多个用户级线程与相同或更少数量的内核级线程关联起来。