一、定义
进程:指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令、数据和堆栈等组成的,是一个能独立运行的活动实体。
线程:线程是进程中的一个实体,作为系统调度和分派的基本单位。Linux下的线程看作轻量级进程。
图解定义:
进程的三态模型:
(1)运行:当一个进程在处理机上运行时,则称该进程处于运行状态。处于此状态的进程的数目小于等于处理器的数目,对于单处理机系统,处于运行状态的进程只有一个。在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。
(2)就绪:当一个进程获得了除处理机以外的一切所需资源,一旦得到处理机即可运行,则称此进程处于就绪状态。就绪进程可以按多个优先级来划分队列。例如,当一个进程由于时间片用完而进入就绪状态时,排入低优先级队列;当进程由I/O操作完成而进入就绪状态时,排入高优先级队列。
(3)阻塞:也称为等待或睡眠状态,一个进程正在等待某一事件发生(例如请求I/O而等待I/O完成等)而暂时停止运行,这时即使把处理机分配给进程也无法运行,故称该进程处于阻塞状态。
进程的五态模型:
(4)新建态:对应于进程刚刚被创建时没有被提交的状态,并等待系统完成创建进程的所有必要信息。 进程正在创建过程中,还不能运行。操作系统在创建状态要进行的工作包括分配和建立进程控制块表项、建立资源表格(如打开文件表)并分配资源、加载程序并建立地址空间表等。创建进程时分为两个阶段,第一个阶段为一个新进程创建必要的管理信息,第二个阶段让该进程进入就绪状态。由于有了新建态,操作系统往往可以根据系统的性能和主存容量的限制推迟新建态进程的提交。
(5)终止态:进程已结束运行,回收除进程控制块之外的其他资源,并让其他进程从进程控制块中收集有关信息(如记帐和将退出代码传递给父进程)。类似的,进程的终止也可分为两个阶段,第一个阶段等待操作系统进行善后处理,第二个阶段释放主存。
二、抽象理解
线程:如果把线程比喻为一条线,那么每句代码就好像一个点,线程的工作就是从开始的点走到结束的点。
多线程:就好像是有多条线,多条线"同时走"(宏观上),有的先开始,有的后开始,有的先结束,有的后结束。
进程:可以看做是由一条线或者更多条线组成的平面图形,所有的线程都有一个自己的进程,也可能多个线程拥有同一个进程。
多进程:由多个平面图形组成的立体图形
注:单CPU时"同时走"按照操作系统理论严格来说,多线程并不是多个线程一起运行的,只是运行线程的切换极快,几乎可以看成是并行运行,也可以说同时运行,但实际上并不是同时的。多核或者多CPU是可能达到"同时走"
三、事例说明
多线程:迅雷下载的任务能够多个一起下载,而不是一个下载完成后才开始下载第二个,或者说在浏览器中能一边听音乐一边浏览网页
多进程:同时执行多个程序,如同时运行Word编辑器,QQ等程序
四、并发,并行
并行:当有多个CPU或者是多核CPU时才有可能实现并行,并行就是多个线程或者多个进程同时运行
并发:单个CPU(也可以多个CPU)将多个线程中的每个线程(多个进程中的每个进程)按时间分为一个一个的时间片,每一个时刻只执行某个线程(进程)的时间片,时间片过期后转而执行下一个线程(进程)的时间片
注:并发宏观上看起来像是并行但是微观上并不能做到并行