进程丶线程
- 单进程丶多进程:
- 单进程:同时只能处理一件事
- 硬件可以同时支持多个事件
- CPU核心,单核,多核
- 多进程:提升程序效率,同时处理多个事件
- 多核心的电脑下开展多个进程
- 不是开的多就是好
- 线程/进程的数量最好不要超过逻辑核心数的1.5~2倍
- 逻辑核心:是抽象
- 物理核心:真正存在的物理核心数
- pip3 install psutil / import psutil / psutil.cpucount() #在python中查看当前电脑的逻辑核心
- 什么是进程:当前真正在运行的(内存中)的任务
- 什么是程序:磁盘上的二进制文件
- 进程的属性:
- 每个进程彼此之间是独立,进程内存独立
- PID:进程的编号
- 范围0~65535
- 进程ID是有限的,所以在使用后要记得释放
- 整个系统下不会有重复的ID
- PID:0 是看不到的
- 调度进程,祖先进程,系统初始化的第一个进程
- PID :1
- init进程,由进程0创建,完成剩余的系统工作
- 开启软件,回收没有没有人回收的资源,系统引导进程
- PID:2
- 内核线程管理
- UID,是哪个用户开启的进程 userID
- linux下用户很多,用的很多
- 比如root用户,超级用户
- 进程PCB:process control block
- 进程控制块:专门用来维护进程中的这些数据
- 操作系统真正管理的一个数据结构
- 1:PID丶UID
- 2:调度状态
- CPU在执行进程任务的时候,不是一直执行完
- 轮询:遍历进程任务列队
- 中断:那个进程有事,进程招手,CPU执行,现在用的大多数都是中断
- 进程的信号
- 挂起,休眠
- 运行,准备运行
- 权重优先级:nice值-19 ~ +20
- 值越小,进程优先级越高
- 负数优先级只有超级用户可以设置
- 3:使用的文件,设备,IO套接字
- 4:处理信息:堆栈指针,计数器,寄存器
- 进程状态:
- 运行状态:实际占用CPU,正在工作的进程
- 睡眠状态:当前进程处于等待,挂起状态
- 连接别人
- 下电影
- 打来文件,把数据从磁盘搬到内存,消耗时间,对于CPU来说,这个时间太长
- CPU会直接切换,而不会等待
- 不能直接处理磁盘
- 只能处理内存数据
- 如果以上事件完成,进程会被唤醒,被CPU处理
- 暂停:打断点
- 僵尸状态:僵尸状态是任何一个要结束的进程都要经历的,非常短暂
- 进程在退出的时候,需要释放资源,但是会保留PCB
- 停止状态:更短暂
- 进程的最后一步
- PPID:当前进程的父进程ID
- PPID用来监护
- 创建,释放
- 孤儿进程:当前进程没有父进程
- 1号(init)进程会查找,担任他们的父进程
- 僵尸进程:子进程工作完毕,父进程不管,会有危害
- 子进程会滞留在僵尸状态(PCB),PID占用
- 占用完毕,没有办法创建新的
- 记得一定要回收
- 同步,异步
- 同步:(同时间进行X),有序执行
- 可以维护某些数据稳定有序
- 尽量处于就绪状态,提高CPU占用率
- 不能高效里用CPU资源
- 异步:不管顺序,只要有CPU资源,我就执行
- 高效的利用CPU资源
- 导致数据,可能有些时候会在多个进程同时处理的时候,顺序不一致,导致混乱
- 处理的数据太大,但是都是一个整体,开多个进程处理的快
- 异步:随便拿,CPU有资源执行即可