进程
进程和程序
比较对象 | 程序 | 进程 |
定义 | 指令的集合 | 程序的一次执行活动 |
静与动 | 进程运行的静态描述 | 动态概念 |
联系 | 程序不能单独运行,只有将程序装载到内存中,系统为其分配资源之后才能运行,这个过程就是进程 |
引入定义
狭义定义:
- 进程是指正在执行的程序。也可以叫做程序的一次执行过程。进程是一个动态的概念。
广义定义:
- 进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
- 在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
特征
- 动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。
- 并发性:任何进程都可以同其他进程一起并发执行。
- 独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位。
- 异步性:进程具有间断性,有着各自独立的、不可预知的速度。
- 向前推进结构特征:进程由程序、数据和进程控制块三部分组成。
- 多个不同的进程可以包含相同的程序:一个程序在不同的数据集里就构成不同的进程,能得到不同的结果;但是执行过程中,程序不能发生改变。
进程的并行与并发
比较对象 | 并行 | 并发 |
特点 | 两者同时执行 | 资源有限的情况下,两者交替轮流使用资源 |
剖析 | 微观上,在一个精确的时间片刻,有不同的程序在执行,要求必须有多个处理器 | 宏观上,在一个时间段上可以看出是在同时执行 |
举例 | 例如赛跑,两人都在不停地往前跑 | 例如单核CPU资源,A使用一段后让给B,B使用一段后再让给A,交替使用,为了提高效率 |
状态
在程序运行的过程中,由于被操作系统的调度算法控制,程序会进入几个状态:就绪,运行和阻塞。
- 就绪(Ready)状态:当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态。
- 执行/运行(Running)状态:当进程已获得处理机,其程序正在处理机上执行,此时的进程状态称为执行状态。
- 阻塞(Blocked)状态:正在执行的进程由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件有:等待I/O完成、申请缓冲区不能满足、等待信号等。
- 挂起状态:因为某种原因,进程放弃cpu,导致进程无法继续执行,此时进程被踢出内存。
同步和异步
- 同步:一个任务的完成需要依赖另外一个任务,一个任务完成后才进行下一个任务,这是一种可靠的任务序列。要么都成功,要么都失败,两个任务的状态是一致的。
- 异步:不需要等待被依赖的任务完成,只通知被依赖的任务要完成什么工作,依赖的任务也立即执行,只要自己完成了整个任务就算完成了,互相不沟通、不交流,是不可靠的任务序列。
阻塞与非阻塞
- 阻塞与非阻塞主要是程序(线程)等待消息通知时的状态角度来说的。
- 阻塞和非阻塞这两个概念与程序(线程)等待消息通知(无所谓同步或者异步)时的状态有关。
同步/异步与阻塞/非阻塞
同步阻塞形式
- 效率最低。举个例子就是,你专心排队,什么别的事都不做。
异步阻塞形式
- 异步操作可以被阻塞住,不是在处理消息时阻塞,而是在等待消息通知时被阻塞。
- 例如,在银行等待办理业务的人,排号领了小纸条,假设在这段时间里他不能离开银行做其它的事情,这个人就被阻塞在等待的过程中了。
同步非阻塞形式
- 实际上是效率低的。举例:你一边看手机、一边抬头看队伍排到你没有,如果把看手机和观察排队的位置看成是程序的两个操作的话,这个程序需要在这两种不同的行为之间来回的切换。
异步非阻塞形式
- 效率更高。因为打电话是你(等待者)的事情,而通知你是柜台(消息触发机制)的事情,程序没有在两种不同的操作中来回切换。
- 很多人会把同步和阻塞混淆,是因为很多时候同步操作会以阻塞的形式表现出来,同样的,很多人也会把异步和非阻塞混淆,因为异步操作一般都不会在真正的IO操作处被阻塞。
线程
定义
- 60年代,在OS中能拥有资源和独立运行的基本单位是进程。随着计算机技术的发展,进程出现很多弊端,一是由于进程是资源拥有者,创建、撤消与切换存在较大的时空开销,因此需要引入轻型进程;二是由于对称多处理机(SMP)出现,可以满足多个运行单位,而多个进程并行开销过大。因此在80年代,出现了能独立运行的基本单位——线程(Threads)。
- 进程是资源分配的最小单位,线程是CPU调度的最小单位。
- 每一个进程中至少有一个线程。
进程与线程
比较对象 | 进程 | 线程 | 备注 |
地址空间和其他资源 | 进程之间相互独立 | 同一进程中的不同线程共享 | 不同进程之间的线程不可见 |
通信 | 进程之间通信IPC | 线程之间直接读写数据段 | 线程需要进程同步和互斥手段辅助来保证数据的一致性 |
调度和切换 | 慢 | 快 | |
定义 | 进程是资源分配的基本单位 | 线程是可执行/可被调度的基本单位 | |
其他 | 在多线程操作系统里,进程不是一个可执行的实体 | ||
线程没有自己的独立资源,其执行必须依赖进程资源 | |||
计算机执行单位以线程为单位 |