并发编程
并发编程
1、多道技术(基于单核背景下产生)
单道:指的是一条道路走到黑 –> 串行
比如:a,b需要使用cpu,a先试用,b等待a使用完成后,b才能使用cpu
多道:一条道路分配走
比如:a,b需要使用cpu,a先使用,b等待a,直到a进入“IO或执行时间过长”,a会(切换+保存状态),然后b可以使用cpu,待b执行遇到“IO或执行时间过长”,再将cpu执行权限交给a,直到两个程序结束
空间上的复用:(*******)
多个程序使用一个cpu
时间上的复用:(*******)
切换 + 保存状态
1.当执行程序遇到IO时,操作系统会将cpu的执行权限剥夺
优点:
cpu的执行效率提高
2.当执行程序遇到执行时间过长时,操作系统会将cpu的执行权限剥夺
缺点:
程序的执行效率低
2、并发与并行
并发:在单核(1个cpu)情况下,当执行a,b两个程序时,a先执行,当a遇到IO时,b开始争抢cpu的执行权限,再让b执行。看起来像同时运行
并行:在多核(多个cpu)情况下,当执行a,b两个程序时,a,b同时执行,他们是真正意义上的同时运行
3、进程
(1)什么是进程
进程是一个资源单位
(2)进程与程序
程序:一堆代码文件
进程:执行代码的过程,称之为进程
(3)进程调度(了解)
① 先来先服务调度算法
比如程序 a,b,若a先来,则先让a先服务,待a服务完毕后,b再服务
缺点:
执行效率低
② 短作业优先调度
执行时间越短,则先调度
缺点:
导致执行时间长的程序,需要等待所有时间短的程序执行完毕后,才能执行
现代操作系统的进程电镀算法: 时间片轮转法 + 多级反馈队列(知道)
③ 时间片轮转法
比如同时有10个程序需要执行,操作系统会给你10秒,然后时间片轮转法会将10秒分成10等份。
④ 多级反馈队列
1级别队列:优先级最高,先执行此队列中的程序
2级别队列:优先级以此类推
3级别队列:…
4、同步与异步
同步与异步指的是 “提交任务的方式”
同步(串行):
两个a,b程序都要提交并执行,假如a先提交执行,b必须等a执行完成后,b才能提交任务
异步(并发):
两个a,b程序都要提交并执行,假如a先提交执行,b无需等a执行完成,就可以直接提交任务
5、阻塞与非阻塞
阻塞:
凡是遇到IO操作都会阻塞
IO操作:
input()
output()
time.sleep()
文件的读写
数据的传输
非阻塞(不等待):
只要不遇到IO阻塞,其他都是非阻塞(比如计算从1到100万的和)
6、进程的三种状态
就绪态:
同步和异步
运行态:程序的运行时间过长 —> 会将程序返回给就绪态
非阻塞
阻塞态:
遇到IO操作
7、进程的两种创建方式(代码)
方式1:直接调用Process类
例1:
import time from multiprocessing import Process def task(): # 任务 print("start...") time.sleep(3) print("end...") if __name__ == "__main__": # target=任务(函数地址) ---> 创建一个子进程 p_obj = Process(target=task) # 告诉操作系统去创建一个子进程 p_obj.start() # 告诉主进程,等待子进程结束后,再执行主进程 p_obj.join() print("正在执行当前主进程")