多线程的实现

tech2023-09-29  110

多线程机制是指操作系统支持在一个进程内执行多个线程的能力。从线程的观点分析,MS-DOS仅支持一个用户进程和一个线程;unix系统支持多个用户进程,但一个进程只能有一个线程;Windows NT,Solaris、linux支持多进程多线程

用户级线程 用户级线程简称ULT,是由用户应用程序创建的,并且用户应用程序负责对这些线程的调度与管理,操作系统内核并不知道有用户级线程的存在,只对进程进行管理。因而与这些线程的内核无关。这是通常所说的“纯ULT方法”,MS-DOS和unix操作系统就属于此类。

这种纯ULT方法的优点如下:

(1)应用程序中的线程的开关时空开销远小于内核级线程的时空开销 (2)线程的调度算法与操作系统的调度算法无关 (3)用户级线程适用于任何操作系统,因为它与内核无关

缺点为:

(1)在一个典型的操作系统中,有许多请求正被阻塞着,因此,当线程执行一个系统请求时,不仅本线程被阻塞,而且该进程中的所有线程都被阻塞。 (2)在该方法的系统中,因为每个进程每次只能由一个线程在cpu上运行,因此,一个多线程应用无法应用到多处理器的优点。内核级线程 内核级线程简称KLT,通常也称为纯KTL方法。内核级线程中所有的线程的创建、调度和管理全都由操作系统内核负责完成。一个应用进程可按多线程方式编写程序,当它被提交给多线程操作系统运行时,内核为它创造了一个进程一个线程,线程在运行中还会创建心得线程。操作系统内核给应用程序的系统调用和应用程序接口,已使用户程序可以创建、执行、撤销线程。Windows NT属于此类。

内核级线程的优点为:

(1)内核可以调度一个进程中的多哥线程,使其同时在多个处理器上并行运行,从而提升系统效率。 (2)当进程中的一个线程被阻塞时,其他线程仍可以运行。 (3)内核本身可以以线程方式实现

缺点为:

由于线程调度程序运行在内核态,而应用程序是在用户态,因此同一进程中的线程切换要经过从用户态到内核态,再从内核态到用户态的两次模式转换。用户级线程与核心态线程相组合的模式 由于用户级线程和内核级线程各有特色,因此,如果将两种方式结合起来,则可吸取两者的优点,结合起来的系统称为多线程操作系统。内核支持多线程的建立、调度和管理。同时系统中又提供使用线程库、允许用户应用程序创建、调度和管理线程。 Linux的内核级线程和其它操作系统的内核实现方式不同、大多数操作系统单独定义描述线程的数据结构,采用独立的线程管理方式,提供专门的线程调度,这些都增加了内核和调度程序的复杂性。而在linux中,将线程定义为 “执行上下文”,它实际上只是进程的另外一个执行上下文而已,和进程采用同样的表示、管理、调度的方式。这样,linux内核并不需要区分进程和线程,只需要一个进程/线程数组,而且调度程序也只有进程的调度程序,内核实现相对于简单的多,而且节约系统用于管理方面的开销。
最新回复(0)