并发编程理论
操作系统发展史
1. 穿孔卡片阶段
计算机很庞大,使用很麻烦,一次只能给一个人使用,期间很多时候计算机都不工作
好处:程序员独占计算机,为所欲为
坏处:计算机利用率太低,浪费资源
2.联机批处理系统
提前使用磁带一次性录入多个程序员编写的程序,然后交给计算机执行
CPU工作效率有所提升,不用反复等待程序录入
3. 脱机批处理系统
极大地提升了CPU的利用率
总结:CPU提升利用率的过程
单道技术
所有的程序排队执行,过程中不能重合
多道技术
利用空闲时间提前准备其他数据,最大化提升CPU利用率
多道技术详细
1.切换
计算机的CPU在两种情况下会切换(不让你用,给别人用)
- 程序有IO操作
输入\输出操作
input、time.sleep、read、write
- 程序长时间占用CPU
我们得雨露均沾,让多个程序都能被CPU运行一下
2.保存状态
CPU每次切换走之前都需要保存当前操作的状态,下次切换回来基于上次的进度继续执行
隐喻:(重要)
开了一家饭店,只有一个服务员,但是同时来了五桌客人
请问:如何让五桌客人都感觉到服务员在服务他们?
让服务员化身为闪电侠,只要客人有停顿,就立刻切换到其他桌,如此往复
进程理论
进程与程序的区别
- 程序:一堆死代码(还没有被运行起来)
- 进程:正在运行的程序(被运行起来了)
进程的调度算法(重要)
1.FCFS(先来先服务)
对短作业不友好
2.短作业优先调度(SJ/PF)
对长作业不友好
3.时间片轮转法+多级反馈队列(目前还在用)
将时间均分,然后根据进程时间长短再分多个等级
等级越靠下表示耗时越长,每次分到的时间越多,但是优先级越低
- 并行
多个进程同时执行,必须要有多个CPU参与,单个CPU无法实现并行
- 并发
多个进程看上去像同时执行,单个CPU可以实现,多个CPU肯定也可以
区别:
并行是从微观上,也就是在一个精确的时间片刻,有不同的程序在执行,这就要求必须有多个处理器。
并发是从宏观上,在一个时间段上可以看出是同时执行的,比如一个服务器同时处理多个session。
判断下列两句话孰对孰错: A:我写的程序很牛逼,运行起来之后可以实现14个亿的并行量 说法不对,并行量必须要有对等的CPU才可以实现,没有那么多数量的CPU B:我写的程序很牛逼,运行起来之后可以实现14个亿的并发量 合情合理,完全可以实现,以后我们的项目一般都会追求高并发 ps:目前国内可以说是最牛逼的>>>:12306
就绪态
所有的进程在被CPU执行之前都必须先进入就绪态等待
运行态
CPU正在执行
阻塞态
进程运行过程中出现了IO操作,阻塞态无法直接进入运行态,需要先进入就绪态
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人