进程的两大概念
一、进程的并行与并发
- 并行:是指两者同时执行,比如赛跑,两个人都在不停的往前跑
- 并发:是指资源有限的情况下,两者交替轮流使用资源,比如一段路同时只能过一个人,A走一段后,让给B,B用完继续给A,交替使用,目的是提高效率
- 区别
- 并行是同时运行,只有具备多个CPU才能实现并行
- 并发是伪并行,看起来是同时运行,单个CPU+多道技术就可以实现并发
二、同步异步阻塞非阻塞
-
阻塞与非阻塞
-
阻塞(等待),凡是遇到I/O都会阻塞
-
I/O
input() output() time.sleep() 文件的读写 数据的传输
-
非阻塞(不等待),除了I/O都是非阻塞
-
-
同步和异步
同步和异步值的是"提交任务的方式"
- 同步:
一个任务的完成需要依赖另外一个任务时,只有等待被依赖的任务完成后,依赖的任务才能算完成,这是一种可靠的任务序列。要么成功都成功,失败都失败,两个任务的状态可以保持一致
- 比如:若有两个任务需要提交,在提交第一个任务时,必须等待该任务执行结束后,才能继续提交并执行第二个任务
- 异步:
不需要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工作,依赖的任务也立即执行,只要自己完成了整个任务就算完成了。至于被依赖的任务最重是否真正完成,依赖它的任务无法确定,所以它是不可靠的任务序列
- 比如:若有两个任务需要提交,在提交第一个任务时,不需要原地等待,立即可以提交并执行第二个任务
- 同步:
-
进程的三种状态
- 就绪状态:
当程序已分配到CPU以外的所有必要的资源,只要获得处理器便可以立即执行,这时的进程状态为就绪状态
- 执行/运行状态:
当进程已获得处理器,其程序正在处理器上执行,此时的进程状态为执行状态
- 阻塞状态:
正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理器而处于阻塞状态。引起进程阻塞的事件可有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等
- 就绪状态:
问:阻塞和同步是一样的吗?非阻塞和异步是一样的吗?
同步与异步:提交任务的方式
阻塞与非阻塞:进程的状态
异步非阻塞:CPU的利用率最大化