进程:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
线程:是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。线程是进程中的一个实体,是进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位,指运行中的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为多线程。
区别:
主要差别在:操作系统资源管理方式。
进程:第一,进程是一个实体。是系统进行资源分配和调度的基本单位,是拥有系统资源的,每一个进程都有它自己的地址空间,一般情况下,包括文本区域、数据区域和堆栈。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(由操作系统执行),它才能成为一个活动的实体,我们称其为进程。一个进程崩溃后,在保护模式下不会对其它进程产生影响
线程:线程自己不拥有系统资源,线程只是一个进程中的不同执行路径,拥有自己的堆栈和局部变量,但线程之间没有单独的地址空间,它可与同属一个进程的其它线程共享进程所拥有的全部资源,一个线程死掉就等于整个进程死掉(这也是主线程结束,进程也随之结束的原因)
一个进程包含一个或多个线程;一个程序至少有一个进程,一个进程至少有一个线程。进程和线程都有就绪、阻塞、运行三种状态;
本人举个浅显一点的例子:进程就是一个项目,项目经理用公司资助的设备和资金给每一个程序员分配任务,这里的设备和资金相当于系统资源,每个程序员去实现分配的功能,这里的任务相当于线程;有的程序员可能单独分到了一部分资金和设备(比如每人的夜宵券和笔记本),有的程序员可能是共用一台设备(比如几个人共用一台打印机),他们拥有的设备都是这个项目所有的设备,公司一开始并没有对每个程序员分配设备,而是根据项目的情况来资助(好像说得有点牵强,反正大概就是这个意思吧,进程线程并不等同于项目和任务)
再通俗一点,进程相当于高大上的项目,而线程就是实现项目中每个具体的功能,就是搬砖。当项目组里的挑大梁的大牛说:我不干了,停止工作,那此时这个项目也就继续不了了,这类似主线程结束,其所在的进程也随之结束。
线程:
适用范围:
服务器中的文件管理或通信控制
前后台处理
异步处理
特点:
轻型实体,
独立调度和分派的基本单位。
可并发执行。
共享进程资源。
进程特点:
动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。
并发性:任何进程都可以同其他进程一起并发执行
独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;
异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进
结构特征:进程由程序、数据和进程控制块三部分组成
总结:
线程执行开销小,但不利于资源的管理和保护;而进程正相反;
多进程的程序要比多线程的程序健壮,但进程切换耗费资源较大,效率要差。
对于要求同时进行并且共享某些变量的并发操作,只能用线程。
跨机器迁移时则用进程。