您的位置: 网站首页 > 程序开发 > Java程序设计 > 第9章 多线程 > 【9.3 操作系统中的进程和线程】

9.3 操作系统中的进程和线程

 

9.3  操作系统中的进程和线程

为了描述程序在并发执行时对系统资源的共享,需要一个描述程序执行时动态特征的概念,这就是进程。在进程的基础上,引入线程的概念可进一步提高进程的并发性。

线程(Thread)是一个动态的对象,它是处理器调度的基本单位,表示进程中的一个控制点并执行一系列的指令。由于同一进程内各线程都可访问整个进程的所有资源,因此它们之间的通信比进程间通信要更方便。

9.3.1  进程

PC上的操作系统纷纷采用多任务和分时设计,一般可以在同一时间内执行多个程序的操作系统都有进程的概念。一个进程就是一个执行中的程序,而每一个进程都有自己独立的一块内存空间和一组系统资源。在进程的概念中,每一个进程的内部数据和状态都是完全独立的,如图9-1所示。在传统上,并发多任务的实现采用的是在操作系统(OS)级运行多个进程。由于各个进程拥有自己独立的运行环境,而且进程间的耦合关系差,并发粒度过于粗糙,因此并发实现也不太容易。

9-1  进程的结构

当前,采用多处理器构成超高性能计算机成为主流。为了发挥新体系结构的并行效率,需要提出一些新的概念和能够支持并行程序的机制。在这种背景下,针对传统UNIX中进程的概念在支持中微粒度并行程序设计方面的不足,提出了线程的概念。

9.3.2  线程

程序中单个顺序的流控制称为线程,多线程则指的是在单个程序中可以同时运行多个不同的线程,执行不同的任务。多线程意味着一个程序的多行语句看上去几乎可以同时运行。

线程与进程相似,是一段完成某个特定功能的代码,是程序中单个顺序的流控制;但与进程不同的是,同类的多个线程是共享一块内存空间和一组系统资源的,而且线程本身的数据通常只有微处理器的寄存器数据,以及一个供程序执行时使用的堆栈,如图9-2所示。所以系统在产生一个线程或者在各个线程之间切换时,负担要比进程小得多,线程被称为轻量级进程(Light-Weight Process),一个进程中可以包含多个线程。

多线程技术与进程技术相比具有以下优越性:

·    由于操作系统级的进程独占自己的虚地址空间,调度进程时,系统必须交换地址空间,因而进程切换时间长。在同一程序内的多个线程共享同一地址空间,因而能使线程快速切换。

·    对多个进程的管理(创建、调度等)造成比较大的系统开销。在需要动态创建新进程的应用中,例如响应于每个客户的请求而建立一个新的服务进程的服务器应用程序中,这种开销比较显著。然而对线程的管理虽然也会有系统开销,但比进程的小得多。

为了实现协作,进程或线程之间需要进行数据交换。对于自动共享同一地址空间的各线程来说,所有的全局数据都可以访问,因而不需要什么特殊手段就能自动实现数据共享。然而进程之间的通信则要复杂得多。

线程个数比进程个数多得多。

9-2  线程的结构