进程 并发 线程 032
一 计算机操作原理简介:
硬盘 永久存储数据的
内存 暂存数据
cpu 运算 三者之间关系如下图
二 并发 : 提高程序的工作效率(伪并行) 遇到io就进行切换
1进程切换 2保存现场 保存程序运行的信息
并行 : 3个cpu同时运行 3个程序
三 进程的创建
打开设备上安装的程序使其进入运行状态即创建了一个进程
与程序的区别 :
1 .程序是指令和数据的有序集合,其本身没有任何运行的含义 , 是一个静态的概念. 而进程是程序在处理机上的一次执行过程,它是一个动态的概念
2 .程序可以作为一种软件资料长期存在 , 而进程有一定盛名周期
3 .程序是永久的,进程是暂时的
例如qq 不运行 就是程序 运行起来 就成为一个进程了.
四 进程调度
想要多个进程交替运行 操作系统必须对这些进程进行调度 而这个调度也不是随机进行的 是需要遵循一定的法则 因此就有了进程的调度算法
先来先服务 调度算法最简单的调度算法 既可用于作业调度 也可用于进程调度 该算法有利于长作业(进程) 不利于短作业(进程) 适合于cpu繁忙性作业 不适合i/o繁忙性作业(进程)
短作业优先调度 对短作业(进程)优先调度,对长作业不利 不能保证紧迫性作业(进程)被及时处理 长短只是被估出来的
时间片轮转 :
多级反馈队列
五 并发与并行
通过进程之间的调度 即进程之间的切换 我们感知到好像是两个视频文件同时在播放 或者音乐和游戏同时在进行 其实无论是并行还是并发 在用户看来都是'同时'运行的 不管是进程还是线程 都只是一个任务而已 真正干活的是cpu来做这些任务
并发 : 伪并行 , 即看起来是同时运行 单个cpu + 多道技术就可以实现并发(并行也属于并发)
并行 : 同时运行 只有具备多个cpu才能实现并行 将cpu比作高速上的多个同向车道 进程好比是行驶的车辆 大家在自己的车道上行驶 互不影响 同时开车 这就是并行
单核下 可以利用多道技术 多个核 每个核也都可以利用多道技术(针对单核而言的)
例如 有四个核 六个任务 ,这样同一时间有4个任务被执行 一旦某个核遇到i/o就被迫中断执行 此时任务5就会拿该核的cpu时间片去执行 这就是单核的多道技术 而一旦被迫中断的任务的i/o结束了 操作系统就会重新调用它 可能被分配到四个cpu的任意一个去执行 保证cpu一直在工作.
六 同步\异步\阻塞\非阻塞(重点)
1 .进程状态介绍
在程序进行运行过程中 由于被操作系统的调度算法控制 程序会进入几个状态 :就绪 运行和阻塞.
就绪状态 当进程已分配到除cpu以外所有必要的资源 只要获得处理机便可立即执行 这时的进程状态称为就绪状态.
执行/运行状态 进程获得处理机 正在处理机上进行 此时的状态称为执行状态
阻塞状态 状态正在执行的进程 由于等待某个事件发生而无法执行时 便放弃处理机而处于阻塞状态 引起阻塞的事件可以有多种 例如 等待i/o完成 申请缓冲区不能满足.等待信件(信号)等
事件请求 : input sleep 文件输入输出 recv accept 等
事件发生 :sleep input 等完成了
时间片到了之后又回到就绪状态 这三个状态不断地在转换
2 .同步异步
同步就是 一个任务的完成需要依赖另一个任务时 , 只有等待被依赖的任务完成以后 依赖的任务才能算完成 这是一种可靠的任务序列 要成功都成功 失败都失败 其实就是一个程序结束才执行另外一个程序 串行的,不一定两个程序就有依赖关系.
异步就是不需要等待被依赖的任务完成 只是通知被依赖的任务要完成什么工作 依赖的任务也立即执行 ,只要自己完成了整个任务就算完成了 至于被依赖的任务是否真正完成 依赖它的任务无法确定 所以它是不可靠的任务序列.
3 .阻塞和非阻塞
与程序(线程)等待消息通知时的状态有关 即是由程序(线程)等待消息通知时的状态角度来说的
4 .同步/异步 与阻塞/非阻塞
1 .同步阻塞
2 .异步阻塞
3 .同步非阻塞
4 .异步非阻塞
七 multiprocess 模块
仔细说来 multiprocess 不是一个模块而是Python中的一个包 ,管理进程的包.
1 .process 模块介绍 该模块是一个创建进程的模块 借助它可以完成进程的创建