python进阶(二、并发编程:操作系统、进程)

2.并发编程
2.1 操作系统
1)多道程序设计技术:
多道程序设计技术是指允许多个程序同时进入内存并运行。即同时把多个程序放入内存,并允许它们交替在CPU中运行,它们共享系统中的各种硬、软件资源。当一道程序因I/O请求而暂停运行时,CPU便立即转去运行另一道程序。
(1)遇到I/O操作就切换
(2)提高CPU的利用率
(3)进程之间数据隔离
(4)时空复用:同一时间多个程序同时执行,同一块内存条存储多个进程数据

2)分时技术:
分时技术是把处理机的运行时间分成很短的时间片,按时间片轮流把处理机分配给各联机作业使用。
若某个作业在分配给它的时间片内不能完成其计算,则该作业暂时中断,把处理机让给另一作业使用,等待下一轮时再继续其运行。由于计算机速度很快,作业运行轮转得很快,给每个用户的印象是,好像他独占了一台计算机。而每个用户可以通过自己的终端向系统发出各种操作控制命令,在充分的人机交互情况下,完成作业的运行。
注意:分时系统没有提高cpu的效率,反而使得计算机的效率降低了。但实现了多个程序共同执行的效果,提高了用户体验。
(1)时间分片
(2)时间片轮转

3)实时系统
实时系统能够及时响应随机发生的外部事件,并在严格的时间范围内完成对该事件的处理。
实时系统可分成两类:
(1)实时控制系统。用于飞机飞行、导弹发射等的自动控制。
(2)实时信息处理系统。用于预定飞机票、查询有关航班、航线、票价等事宜。

4)操作系统的作用
操作系统就是一个协调、管理和控制计算机硬件资源和软件资源的控制程序。

2.2 进程
2.2.1 相关概念
1)进程(Process)正在运行的程序的实例,是系统进行资源分配和调度的最小基本单位,是操作系统结构的基础。操作系统中用pid来唯一标识一个进程

2)线程:线程是进程的组成部分,它代表了一条顺序的执行流。线程是计算机中能够被操作系统调度(给CPU执行)的最小单位。

实际执行具体编译之后代码的是线程,所以CPU执行的是解释之后的线程中的代码。

3)并发:并发是指资源有限的情况下,多个程序交替轮流使用资源。
宏观上:多个程序在同时执行
微观上:多个程序轮流执行,本质还是串行
举例:单核cpu,同时运行3个程序

4)并行:并行是指资源够用的情况下,多个程序同时执行。
举例:4核CPU,运行三个程序。

5)同步:就是一个任务的完成需要依赖另外一个任务时,只有等待被依赖的任务完成后,依赖的任务才能算完成,这是一种可靠的任务序列。要么成功都成功,失败都失败,两个任务的状态可以保持一致。

6)异步:是不需要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工作,依赖的任务也立即执行,只要自己完成了整个任务就算完成了。至于被依赖的任务最终是否真正完成,依赖它的任务无法确定,所以它是不可靠的任务序列。

7)阻塞(block):CPU不工作。如input、accept、recv、recvfrom、connect

8)非阻塞:CPU在工作

9)同步阻塞形式:效率最低。
同步任务序列执行中,遇到阻塞代码。顺序执行,遇到阻塞
input= input(“>>>”)

10)同步非阻塞形式:实际上是效率低下的。
同步任务序列执行中,没有遇到阻塞代码。顺序执行,没有遇到阻塞
result = eval(1 + 2)

11)异步非阻塞
异步任务序列执行中,没有遇到阻塞代码。并行执行,没有遇到阻塞
start()

12)异步阻塞
异步任务序列执行中,遇到阻塞代码。并行执行,遇到阻塞

2.2.2 进程的三状态图
1)进程的三状态:就绪、运行、阻塞
  (1)就绪(Ready)状态:当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态。
  (2)执行/运行(Running)状态:当进程已获得处理机,其程序正在处理机上执行,此时的进程状态称为执行状态。
  (3)阻塞(Blocked)状态:正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件可有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等。

2)进程的三状态图:

2.2.3 进程的调度算法
给所有进程分配资源或者分配CPU使用权的一种方法
(1)短作业优先
(2)先来先服务
(3)时间片轮转发
(4)多级反馈算法:
多个任务队列,优先级从高到低
新来的任务总是优先级最高的
每一个新任务几乎立即获得一个时间片
执行完一个时间片之后,就会排到下一级队尾
总是执行完优先级高得队列,才会执行优先级低的队列
优先级越高时间片越短

2.2.4 进程的创建与结束
1)进程的创建:
(1)系统初始化
(2)一个进程在运行过程中开启了子进程
(3)用户的交互式请求,而创建一个新进程(如用户双击暴风影音)
(4)一个批处理作业的初始化(只在大型机的批处理系统中应用)

2)进程的结束:
(1)正常退出(自愿,如用户点击交互式页面的叉号,或程序执行完毕调用发起系统调用正常退出,在linux中用exit,在windows中用ExitProcess)
(2)出错退出(自愿,python a.py中a.py不存在)
(3)严重错误(非自愿,执行非法指令,如引用不存在的内存,1/0等,可以捕捉异常,try...except...)
(4)被其他进程杀死(非自愿,如kill -9)

2.2.5 multiprocessing模块
multiprocessing不是一个模块而是python中一个操作、管理进程的包。
multi是取自multiple的多功能的意思,在这个包中几乎包含了和进程有关的所有子模块。
由于提供的子模块非常多,将这部分大致分为四个部分:
创建进程部分,
进程同步部分,
进程池部分,
进程之间数据共享。

原文地址:https://www.cnblogs.com/bdzxh/p/14080691.html