进程 & 程序 & 线程
上次刘文斌同学来和我交流一个问题,什么叫进程?希望举个生活中的例子。很惭
愧,自己看了书,当时就没能马上用自己的语言表述出来。交流之后再做一个小结:
一、基础导论
1、进程(process): 通俗的说就是一件事情从头到尾有序的完整的完成的一个过程。
2、程序(Program):是为要达成某个结果一些指令、文档或命令。
3、进程(Lightweight Process,简称LWP):它是程序执行流的较小的单元。 一
个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进
行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单
位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一
点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的
其他的线程共享进程所拥有的全部资源. 进程和线程关系:一个线程可以创建和撤销另
一个线程;同一个进程中的多个线程之间可以并发执行.
程序、进程和线程关系图一:
一个程序中可以有许多的进程,一个进程里可以有许多的线程;同样一个进程里可
以有许多的程序,一个程序里也可以有许多个进程,进程了可以有许多的线程,线程是
OS执行中的最小单元,但线程中同样可有程序、进程和子线程。如下图二:
二、对比总结:
进程和线程都是由操作系统所体现的程序运行的基本单元,系统利用该基本单元实现
系统对应用的并发性。 进程和线程的区别在于:
简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于
进程,使得多线程程序的并发性高。
另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提
高了程序的运行效率。
线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺
序执行序列和程序的出 口。但是线程不能够独立执行,必须依存在应用程序中,由应用
程序提供多个线程执行控制。
从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执
行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及
资源分配。以上就是进程和线程的重要区别。
三、为何要线程:
1、因为进程有许多的不足:
1)开销大,每一个进程都要占用一个主存空间和进程控制块。
2)速度慢,进程之间传递信息,从一个工作区到另外一个工作区要“通信”机制,速
度慢。
3)进程多,进程调度次数多,给调度和控制带来复杂性。
2、用心线程的好处多多:
1)省了开销,坚持进程,省了工作和进程控制块的开销
2)创建速度快,创建线程要为线程建一章“线程描述表”,不需要另外分配资源,创
建速度快。
3)传递速度快,线程间信息传递在同一主存空间进行,不需额外通信机制,传递速度
快。
4)线程能独立执行,能充分发挥处理器与外围设备并行工作的能力。
3、线程的属性:
1)同一进程中可以含多个线程,多线程共享改进程所有资源
2)线程也有生命周期,等待态、就绪态、运行态
3)线程数处理器独立调度单位,多线程可并发执行
4)不同线程可以执行相同程序
四、线程&进程
1)进程作为资源分配单位而线程是调度和执行的单位
2)每一个进程有自己的主存空间,而同一个进程个线程共享该进程的主存空间。
注:线程在执行中经历状态变化。