我对于线程,进程的概念一直都是比较模糊,最近整理了一下。总结起来就是,线程是进程的一部分,进程
是程序的一部分。
线程的引入 : 例如,有一个Web服务器要进程的方式并发地处理来自不同用户的网页访问请求的话,可以
创建父进程和多个子进程的方式来进行处理,但是创建一个进程要花费 较大的系统开销和占用较多的资源。除
外,这些不同的用户子进程在执行的时候涉及到进程上下文切换,上下文切换是一个复杂的过程。所以,为了
减少进程切换和 创建的开销,提高执行效率和节省资源,人们在操作系统中引入了"线程(thread)"的概念。
进程的作用和定义 :进程是为了提高CPU的执行效率,减少因为程序等待带来的CPU空转以及其他计算机
软硬件资源的浪费而提出来的。进程是为了完成用户任务所需要的程序的一次执行过程和为其分配资源的一个
基本单位,是一个具有独立功能的程序段对某个数据集的一次执行活动。
线程和进程的区别 :
1、线程是进程的一部分,所以线程有的时候被称为是轻权进程或者轻量级进程。
2、一个没有线程的进程是可以被看作单线程的,如果一个进程内拥有多个进程,进程的执行过程不是一条
线(线程)的,而是多条线(线程)共同完成的。
3、系统在运行的时候会为每个进程分配不同的内存区域,但是不会为线程分配内存(线程所使用的资源是
它所属的进程的资源),线程组只能共享资源。那就是 说,出了CPU之外(线程在运行的时候要占用CPU资
源),计算机内部的软硬件资源的分配与线程无关,线程只能共享它所属进程的资源。
4、与进程的控制表PCB相似,线程也有自己的控制表TCB,但是TCB中所保存的线程状态比PCB表中少多了。
5、进程是系统所有资源分配时候的一个基本单位,拥有一个完整的虚拟空间地址,并不依赖线程而独立存在。
线程和进程相同点 :
1、 二者都具有ID,一组寄存器,状态,优先级以及所要遵循的调度策略。
2、每个进程都有一个进程控制块,线程也拥有一个线程控制块。
3、线程和子进程共享父进程中的资源;线程和子进程独立于它们的父进程,竞争使用处理器资源;线程和
子进程的创建者可以在线程和子进程上实行某些控制,比如,创建者可以取消、挂起、继续和修改线程和子
进程的优先级;线程和子进程可以改变其属性并创建新的资源。
进程与程序的区别 :
程序是一组指令的集合,它是静态的实体,没有执行的含义。而进程是一个动态的实体,有自己的生命周期。
一般说来,一个进程肯定与一个程序相对应,并且只有一个,但是一个程序可以有多个进程,也可以只有一个
进程。除此之外,进程还有并发性和交往性。简单地说,进程是程序的一部分,程序运行的时候会产生进程。
总结 :
线程是进程的一部分,进程是程序的一部分。
其他理解:
进程(Process)的定义是a program in execution,也就是正在执行的程序。而进程具备四个特征:动态性
(dynamic)、并发性(concurrence)、独立性 (independency)和结构化(structure)。这四个特性中,有些是程序
不具备的。而且作为进程载体的进程控制块(PCB)中除了有程序 代码,还包括进程状态,程序计数器,寄存
器,调度信息等。所以我认为程序和进程之间不是包含关系。
参考:http://www.ezloo.com/2007/10/thread_process_program.html