一、进程与程序的区别
程序是应用程序作为一个静态文件存储在计算机系统的硬盘等存储空间中,而进程则是处于动态条件下由操作系统维护的系统资源管理实体,也就是程序的动态执行过程。
二、进程与线程的区别
进程是系统中程序执行和资源分配的基本单位。每个进程都拥有自己的数据段、代码段、堆栈段。为了减小进程切换的开销,引入了线程的概念,线程是一个进程内的基本调度单位,也可以称为轻量级进程,线程是在共享内存空间中并发的多道执行路径,共享一个进程的资源。同进程一样,线程也将相关的变量值放在线程控制表内。一个进程可以有多个线程,也就是有多个线程控制表和堆栈寄存器,但却共享一个用户地址空间,而进程在执行过程中拥有独立的内存空间。简而言之,一个程序至少有一个进程,一个进程至少有一个线程。需要注意的是,每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
三、线程分类
线程按照调度者可分为用户级线程和核心级线程。
用户级线程:主要解决上下文切换问题,它的调度算法和调度过程全部由用户自行决定,运行不需要内核支持。在这里,操作系统往往会提供一个用户空间线程库,该库提供了线程的创建、调度、撤销等功能,而内核仍然仅对进程进行管理。如果一个进程中某个线程调用了一个阻塞的系统调用,那么该进程以及进程中其他线程会同时被阻塞。由于这里的处理器时间片分配是以进程为基本单位,所以每个线程执行的时间相对减少。因此,用户级线程在一个进程的多线程调度中无法发挥多处理器优势。
核心级线程:由操作系统内核创建和撤销。内核维护进程及线程的上下文信息以及线程切换。一个内核线程由于I/O操作而阻塞,不会影响其它线程的运行。核心级线程允许不同进程中线程按照同一相对优先调度方法进行调度,这样可以发挥多处理器并发优势。
现在操作系统基本上采用用户级线程与内核级线程并存的方法,一个用户级线程可以对应一个或多个核心级线程。在发挥多处理机性能的同时最大限度减少调度开销。