多线程与进程

来源:互联网 发布:大数据中的云计算技术 编辑:程序博客网 时间:2024/06/06 03:01
多线程技术有何优越性
[ 2007-11-19 17:04:00 | By: 扬扬 ]
 
0
推荐

多任务指的是系统可以同时运行多个进程,每个进程又可以同时执行多个线程.进程是应用程序的运行实例,拥有自己的地址空间.每个进程拥有一个主线程,同时还可以建立其他线程.线程是操作系统分配CPU时间的基本实体,每个线程占用的CPU时间由系统分配,系统不停地在线程之间切换.进程中的线程共享进程的虚拟地址空间可以访问进程的资源,处于并行执行状态,这就是多线程的基本概念.

进程与线程的概念

进程是可以与其他程序并发执行的一次执行过程,是系统进行资源分配和调度的基本单位.进程是一个程序关于某个数据集的一次运行.也就是说,进程是运行中的程序,是程序的一次运行活动.进程是动态的概念,而程序是静态的概念是指令的集合.因此,进程具有动态性和并发性.

   从静态的角度看,进程实体由程序块、进程控制块(PCB)和数据块3部分组成,程序块描述该进程所要完成的任务;数据块包括程序在执行时所需要的数据和工作区。进程控制块包括进程的描述信息、控制信息、资源管理信息和CPU现场保护信息等,反映了进程的动态特性。

PCB是进程存在的唯一标志,PCB描述了进程的基本情况系统根据PCB感知进程的存在,系统还通过PCB中所包含的各项变量的变化,来掌握进程所处的状态,以达到控制进程活动的目的。在创建一个过程时,首先应创建其PCB,然后才能根据PCB中的信息对进程实施有效的管理和控制。当一个进程完成其功能后,系统则释放PCB,进程也随之消亡。一般情况下,进程的PCB结构都是全部或部分常驻内存的。

  进程的状态如下:

就绪状态:是指进程分配到除处理机以外的必需资源(已具备了执行的条件)的状态。进程被创建后处于就绪状态,处于就绪状态的进程可以有多个。

执行状态:是指进程占有处理机正在CPU上执行的状态。在单CPU系统中,每一时刻只有一个进程处于执行状态。

 阻塞状态:是指进程因等待某个事件的发生而放弃处理机进入等待处理机进入等待状态。系统中处于这种状态的进程可以有多个。

 进程的状态随着自身的推进和外界的变化而变化。比如就绪状态的进程被进程调度程序选中进入执行状态;执行状态的进程因等待某一事件的发生转入等待状态;等待状态的进程所等待事件来到便进入就绪状态。进程的状态可以动态地相互转换,但阻塞状态的进程不能直接进入执行状态,就绪状态可以动态地相互转换,但阻塞的进程不能直接进入执行状态,就绪状态的进程不能直接进入阻塞状态。在任何时候,任何进程都处于且只能处于某一状态。

  在支持线程的操作系统中,纯种是进程中的一个实体,是系统实施调 度的独立单位。线程只拥有一些在运行中必不可少的资源,它与属于同一个进程的其他纯种共享该进程所拥有的资源。各纯种之间可以并发地运行。线程切换时只需保存和设置少量寄存器的内容这,而并不涉及存储器管理方面的操作,所以线程切换的开销远远小于进程的切换(进程状态的要引起资源转移及现场保护等问题)。同一个进程的多个线程共享同一个地址空间,这使得纯种之间同步和通信的实现也比较容易。

进程与线程的比较

进程和线程都是由操作系统所管理的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发笥。进程和线程的区别如下:

   简而言之,一个程序至少要有一个进程,一个进程至少要有一个线程。线程划分尺度小于进程,使得多线程程序的并发性高。

另外,进程在执行过程中拥有独立的内在单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

  线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

  从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理,以及资源分配。这就是进程和线程的重要区别。

多线程技术的优越性

1.快速的关联切换

由于操作系统级的进程独占自己的虚地址空间,调度进程时,系统必须交换地址空间,因而进程切换时间长。在同一程序内的多个线程共享同一地址空间,因而能使线程快速切换。例如,10个进程,每个进程10个线程的系统与100个进程、每个进程1个进程1个线程的系统相比,前者的运行速度要快于后者。

2.系统额外开销小

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

3.通信很容易实现

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

4.线程个数比进程个数多得多

许多多任务操作系统限制用户进程总数,如不少UNIX版本的典型值为40-100,这对许多并发应用来说远远不够。在多线程系统中,虽存在线程总数限额,但个数多得多(OS/2支持4096个线程)

 

 

 

http://blog.csai.cn/user1/39172/archives/2007/20031.html

原创粉丝点击