8.9内容整理和概述
今日内容概要
内容目录
进程
程序:一堆躺在文件上的死代码
进程:正在被运行的程序(活的)
进程调度算法演变:
1.先来先服务算法:
谁先来先调谁,针对耗时比较短的程序不友好
2.短作业优先调度:
先调短的程序,针对耗时比较长的程序不友好
3.时间片轮转法+多级反馈队列
1.先平分时间给所有进程
2.多次分配后,进程持续越长分配的时间额度越多,优先级越低
并行:多个进程同时执行(等单位的CPU)
并发:单cpu做到类似多个进程同时执行的效果
进程的三状态:(就绪,阻塞,运行)
1.所有的进程要想被运行,必须先经过就绪态
2.运行过程中如果出现了IO操作,则进入阻塞态
3.运行过程中如果时间片用完,则继续进入就绪态
4.阻塞态要想进入运行态必须先经过就绪态
"进程的提交状态"
同步:提交完任务之后原地等待任务的结果,期间不做任何事
异步:提交完任务之后不原地等待直接去做其他事,结果自动提醒
"进程的执行状态"
阻塞:阻塞态
非阻塞:就绪态 运行态
"进程态"
同步阻塞
同步非阻塞
异步阻塞
异步非阻塞
"进程创建"
代码创建进程:
1.Process(target=目标函数, args=目标函数传参(元组)): 创建一个进程对象
2.继承Process类,派生
"进程数据默认隔离"
解释:多个进程数据彼此之间默认是相互隔离的
解除隔离方法:需要借助于'管道'或者'队列'
"进程方法"
方法:
1.查看进程号:
1.current_process().pid(current_process模块):查看当前进程号
2.os.getpid():查看当前进程号
3.os.getppid():查看父进程号
2.销毁子进程:进程.terminate()
3.判断进程是否存活:进程.is_alive()
"特殊进程"
守护进程:
定义:伴随着守护对象的存活而存活,死亡而死亡的进程
使用:
1.进程.daemon = True
2.必须在进程start之前执行
僵尸进程:
定义:进程已经运行结束,但是相关的资源并没有完全清空的进程
# 父进程参与回收资源
孤儿进程:
定义:子进程正常运行,父进程意外死亡的进程
# 操作系统会自动分配"福利院"接收
join方法
join:主进程等待子进程(调用join进程)运行结束之后再运行
队列
定义:一种特殊的线性表,数据在前端进行删除操作,而在表的后端进行插入操作,即"先进先出"
使用:multiprocessing模块的Queue
方法:
1.Queue(个数):创建队列,并规定容纳的数据个数
2.put(数据):往队列添加数据
3.full():判断队列是否已经存满
4.empty():判断队列是否为空
5.get():向队列前端获取下一个数据,如果超出数据获取极限,程序等待并处于阻塞态,直到队列中有数据被添加
6.get_nowait():向队列前端获取下一个数据,如果超出数据获取极限,直接报错
"注意":多进程下,有些方法不能准确使用!