您的位置:首页 > 其它

进程与线程的关系

2017-08-12 22:42 766 查看
进程与线程经常会放到一起提及,那么他们有什么联系和区别呢?

首先来看一下两者的定义:

进程(Process):是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。它的执行需要系统分配资源创建实体之后,才能进行。

线程(Threading):也叫作轻量级进程,是一个基本的CPU执行单元,也是程序执行过程中的最小的单元。线程的特点就是在不需要独立资源的情况下就可以运行。

进程和线程的主要差别在于它们是不同的操作系统资源管理方式:

1. 一个程序至少有一个进程,一个进程至少有一个线程。(进程可以理解成线程的容器,也就是不太严格的说二者有包含关系)

2.  进程在执行过程中拥有独立的内存单元,而同一个进程中的多个线程共享内存,拥有自己的栈空间,拥有独立的执行序列。分配资源时的对象必须是进程,不会给一个线程单独分配系统管理的资源。

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

4. 线程的创建和结束所需要的系统开销也比进程的创建和结束要小得多。

5. 进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,多进程环境中,任何一个进程的终止,不会影响到其他进程。而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,线程间是彼此依存的。多线程环境中,父线程终止,全部子线程被迫终止(没有了资源)。

6. 从属关系上来讲,主线程与其创建的子线程之间是平行的,线程可以操作同一进程中的其他线程。而进程有严格的父子关系,进程只能对其子进程进行操作。进程的个体间是完全独立的。

7. 进程间采用的通信方式要么需要切换内核上下文,要么要与外设访问(有名管道,文件)。所以速度会比较慢。而线程采用自己特有的通信方式的话,基本都在自己的进程空间内完成,不存在切换,所以通信速度会较快。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: