1、线程与多线程线程与多线程 在单用户多任务的计算机中,如同在Windows NT 中那样,除进程外,引入了 一个新概念 线程(thread)。对象、线程和进程三者构成Windows NT 操作系统基本元成分。线种概念在微型机多任务系统中十分重要。进程在运行中要提出访问管理程序(系统调用)的要求,例如提出I/O要求,也可能由于时钟而打断了当前进程的运行,而调度其他就绪进程运行,也就是经常会有进程开关问题。另外还有两次模式开关(用户模式内核模式用户模式)的开销。所有这些开销的总和,在一定程度上降低了并发进程所带来的利益。传统的进程概念有两个严重的局限性。首先许多应用想并发执行彼此间独立的任务,但又必
2、须要共享一个公共的地址空间和其他资源。但传统的进程概念对它们以上的要求难以支持,往往把这些应用中的独立的任务串行化,效率很低。其次传统的进程不能很好地利用多处理器系统。因为一个进程在某个时刻只能使用一个处理器。一个应用固然可以创建多个进程,并把它们分到多个处理器上执行,但如何做到使用相同的地址空间和资源?这些促使人们引起线程机制。线程的概念线程的概念线程是进程内一个相对独立的、可调度的执行单元。根据线程定义可知线程有以下性质:根据线程定义可知线程有以下性质:(1)线程是进程内的一个相对独立的可执行单元。(2)线程是操作系统中的基本调度单元,因此线程中应包含有调度所需的必要信息。(3)由于线程是
3、被调度的基本单元,而进程不是调度的单元。所以每个进程在创建时,至少需要同时为该进程创建一个线程。也就是说进程中至少要有一个或一个以上线程,否则该进程无法被调度执行。(4)需要时,线程可以创建其他线程。(5)进程是被分给并拥有资源的基本单元,同一进程内的多个线程共享该进程的资源。但线程并不拥有资源,只是使用它们。(6)由于共享资源(包括数据和文件),所以线程间需要通信和同步机制。(7)线程有生命期,有诞生和死亡。在生命期中有状态的变化。采用线程机制有些什么好处呢?对于多线程机制而言,一个进程可以有多个线程,这些线程共享该进程资源。这些线程驻留在相同的地址空间,共享数据和文件。如果一个线程修改了一
4、个数据项,其他线程可以了解和使用此结果数据。一个线程打开并读一个文件时,同一进程中的其他线程也可以同时读此文件。总而言之,这些线程运行在同一进程的相同的地址空间内。所以我们可以看出线程的重要优点所以我们可以看出线程的重要优点:1、在一个已有进程中创建一个新线程比创建一个全新进程所需的时间少。2、终止一个线程比终止一个进程花费的时间少。3、线程间切换比进程间切换花费的时间少。4、线程提高了不同的执行程序间通信的效率。在大多数操作系统中,独立进程间的通信需要内核的干涉,以提供保护和通信所需要的机制。但是,由于在同一个进程中的线程共享存储空间和文件,它们无需调用内核就可以互相通信。实现一个线程包实现
5、一个线程包有两种方法可以实现一个线程包:在用户空间中和在内核中。对于这两种方法还存在一些争议,可能会出现一种混合的方法,分别加以讨论用户级线程用户级线程:用户线程在内核之上被支持,在用户层由一个线程库实现。该线程库为线程的创建、调度及管理提供支持,而无需内核的支持。例如,UNIX并不支持线程,但已经有了为它而写的各种各样的用户空间的线程包。由于内核对用户层线程没有感知,所有线程的创建和调度在用户空间完成,不需要内核的干预。缺点:如果内核是单线程的,那么任何用户级线程执行一个阻塞系统调用将引起整个进程阻塞,即便其它线程在该应用程序中是可运行的。内核级线程内核级线程:由操作系统直接支持:内核负责在
6、内核空间执行线程创建、调度和管理。线程之间的阻塞相互独立(既一个线程执行阻塞系统调用时,内核可以调度进程里的其它线程执行)。更好的支持多CPU体系结构。缺点:创建和管理比用户线程慢。其它方案其它方案:许多研究者都在尝试结合用户线程和内核线程的长处,把两种线程结合起来,形成了三种多线程模型:多对一模型(m:1)一对一模型(1:1)多对多模型(m:n)基于线程的观点,可以把基于线程的观点,可以把O.S.分为以下四类:分为以下四类:(1)单进程和单线程系统单进程和单线程系统在这种操作系统中只有一个进程,而且每个进程中只有一个线程。这种系统的代表是MS-DOS。也可把单纯基于进程的操作系统看成是具有线
7、程支,只不过每 个进程中只有一个线程(进程也就是线程了)。(a)(b)(c)(d)基于线程和基于进程的操作系统基于线程和基于进程的操作系统(2)多进程和单线程系统多进程和单线程系统在这种操作系统中有多个进程操作系统。但每个进程中只有一个线程。该系统的代表就是传统意义上的UNIX操作系统。以上两类是传统的操作系统,实际并没有线程概念。(3)单进程和多线程系统单进程和多线程系统在这种操作系统中只有一个进程。但每个进程有多个线程。Jave Run-time System可以认为是这种系统。(4)多进程和多线程系统多进程和多线程系统在这种操作系统中有多个进程。而且每个进程有多个线程,是当前最为广泛的多线程操作系统。现代操作系统如Windows NT等几乎都是属于这种类型的。