2015年(12)
分类: LINUX
2015-08-02 19:45:25
多进程与多线程都属于并发技术,用于在同一时间内执行多项任务,让程序从一条线顺序执行变成了多项任务同时处理的多线执行,多进程和多线程之间有着千丝万缕的联系,但其中又有许多不同,以下就是我在学习过程中总结的一些多进程与多线程之间的联系和区别:
进程:
进程是一个“执行中的程序”,它是动态的实体,是程序的一次执行过程。进程是操作系统进行系统资源分配和调度的基本单位。
线程:
为了让计算机在同一时间内能执行更多任务,就在进程的内部又划分了许多线程。线程在进程的内部,它比进程更小,并且能够独立运行。线程是CPU独立调度和运行的基本单位,它基本上不拥有系统资源,只拥有一点在运行中必不可少的资源 (如程序计数器,一组寄存器和栈) ,所以它常被称为 "轻量级的进程" 。
1> 程序的一次执行至少包括一个进程,一个进程中至少包括一个线程。
2> 线程在进程内部,一个进程下的多个线程共享进程的地址空间,线程的私有堆栈在实际使用时与进程堆栈相互独立,但在本质上也是从进程的堆栈中分取的。
3> 多进程与多线程都属于并发技术,以多进程的形式可以使多个任务同时处理,而以多线程的形式可以将一个进程执行的任务分成不同的部分同时处理。
1> 进程是拥有系统资源的独立单位,在创建和撤销进程时,操作系统都会为进程分配和回收资源,资源包括地址空间,文件,IO,页表等。但是由于线程是依附于进程的,线程的代码段,数据段,打开文件,IO资源,地址空间,页表等都是和同进程下所有线程共享的。
2> 因为进程拥有独立的地址空间,所以当一个进程崩溃时,在保护模式下不会影响到其他进程。而多线程共享进程的地址空间,所以一个线程崩溃,就等于整个进程崩溃,而同进程下的所有线程也就随之消亡。所以多进程的程序 健壮性 比多线程的程序更优秀。
3> 在系统调度方面,由于多线程共享同一个地址空间,而多进程各自拥有独立的地址空间,所以多线程之间的切换速度高于多进程之间的切换速度。
4> 在通信机制方面,多进程间的数据空间相互独立,彼此通信要以专门的通信方式进行,通信时必须经过操作系统。而同一个进程下的多个线程共享数据空间,一个线程的数据可以直接提供给其他线程使用,而不必经过操作系统。因此,线程间的通信更加方便和省时。
地址空间:
系统内核除了管理本身的内存外,还必须管理用户空间中进程的内存,我们称这个内存为进程地址空间,也就是系统中每个用户空间进程所看到的内存。
Linux操作系统采用虚拟内存技术,所有进程之间以虚拟方式共享内存。
通常情况下,每个进程都有唯一的这种平坦地址空间,而且进程地址空间之间彼此互不相干。但是进程之间也可以选择共享地址空间,这样的进程就叫做线程。
通俗来说,进程的地址空间就是进程中可以使用的地址的集合。