计算机五大组成部分
控制器
运算器
存储器
输入设备
输出设备
计算机的核心真正干活的是CPU(控制器+运算器=中央处理器)
- 程序要想计算机运行,它的代码必须要先由硬盘读到内存,之后cpu取指再执行
操作系统发展史
穿孔卡片处理系统:一个人占一个机房,输入卡片
联机批处理系统:(磁带)节省插入卡片的等待的时间,提升了CPU处理时间。
脱机批处理系统:输入机(硬盘) --> 卫星机 --> 高速磁带(内存)---> 主机,CPU运行的速度是非常快的,而数据从硬盘读取到内存速度相对来说是非常慢的。
多道技术
单核实现并发的效果
必备知识点
-
并发
看起来像同时运行的就可以称之为并发
-
并行
真正意义生的同时执行
ps:
- 并行肯定算并发
- 单核的计算机肯定不能实现并行,但是可以实现并发!!!
补充:我们直接假设单核就是一个核,干活的就是一个人。
多道技术图解
节省了多个程序运行的总耗时
-
单道(串行)
任务A: 输入过程 - 执行过程 - 输出过程 - 任务B:输入过程 - 执行过程 - 输出过程
-
多道(在执行任务A的时候控制硬盘将任务B提前读取到内存) 时间线短了,节省了时间
任务A输入过程 ----- 执行过程 ----- 输出过程
任务B输入过程 -----执行过程 ------输出过程
多道技术重点知识
空间上的复用与时间上的复用
-
空间上的复用
多个程序公用一套计算机硬件
-
时间上的复用
例子:洗衣服30s, 做饭50s, 烧水30s
切换+保存状态
python""" 切换(cpu)分为两种情况 1.当一个程序遇到 IO操作时候,操作系统会剥夺该程序的cpu执行权限. 作用:提高了cpu的利用率,并且也不影响程序的执行效率 2.当一个程序长时间占用cup的时候,操作系统也会剥夺该程序的cpu执行权限. 作用:降低了程序的执行效率(原本时间+切换时间) """
进程理论
必备知识点
程序与进程的区别
python
"""
程序就是一堆躺在硬盘上的代码,是"死"的
进程则表达程序正在执行的过程,是"活"的
"""
进程调度
-
选来先服务调度算法
python"""对长作业有利,对短作业无利"""
-
短作业优先调度算法
Python"""对短作业有利,对长作业无利"""
-
时间片轮转法+多级反馈队列
python"""" 时间片:将固定的时间切分成N多份,每一份就表示一个时间片 越往下说明该任务需要的时间越长 越往下任务的执行优先级越低(当第一队里中出现了新的任务,cpu会立刻停止当前任务,去执行新添加进来的第一层队列中的任务) 在Linux中可以给任务设置优先级,一次性分配好几个时间片(了解) """"
进程运行的三状转换图
所有的程序要想被执行必须先经历就绪状态
两对重要概念
-
同步和异步
python"""描述的是任务的提交方式""" 同步:任务提交之后,原地等待任务的返回结果,等待的过程中不做任何事(干等) 程序层面上表现出来的感觉就是卡住了 异步:任务提交之后,不原地等待任务的返回结果,直接去做其他事情 我提交的任务结果如何获取? 任务的返回结果会有一个异步回调机制自动处理
-
阻塞非阻塞
python"""描述的程序的运行状态""" 阻塞:阻塞态 非阻塞:就绪态, 运行态
上述概念的组合:最高效的一种组合就是异步非阻塞
开启进程的两种方式
定心丸:代码开启进程和线程方式,代码书写基本是一样的.
join方法
python
from multiprocessing import Process
import time
def task(name,n):
print('%s is running' % name)
time.sleep(n)
print('%s is over' % name)
if __name__ == '__main__':
# 1.创建一个对象
# p1 = Process(target=task, args=('jason', 1))
# p2 = Process(target=task, args=('egon', 2))
# p3 = Process(target=task, args=('tank', 3))
# # 2.开启进程
# start_time = time.time()
# p1.start() # 告诉操作系统帮你创建一个进程
# p2.start()
# p3.start()
# p1.join()
# p2.join()
# p3.join()
# print('主',time.time() - start_time)
start_time = time.time()
p_list = []
for i in range(1,4):
p = Process(target=task, args=('%s' % i, i))
p.start()
p_list.append(p)
for i in p_list:
p.join()
print('主', time.time() - start_time)
"""
windows操作系统下,创建进程一定要在main内创建
因为Windows下创建进程类似于模块导入方式
会从上往下依次执行代码
linux中则是直接将代码完整的拷贝一份
"""
进程间数据相互隔离
python
from multiprocessing import Process
money = 100
def task():
global money # 局部修改全局
money = 666
print('子', money)
if __name__ == '__main__':
p = Process(target=task)
p.start()
p.join()
print(money)
昨日回顾
-
操作系统的发展史
python"""其实主要就是围绕cpu的利用率问题"""
-
多道技术
python""" 单核实现并发的效果 并发:看起来像是同时运行的就可以叫做并发 并行:真正意义上的同时运行 空间和时间上的复用 空间上 多个程序公用一套计算机硬件 时间上 切换+保存状态 """ # 切换分为两种 # 1.当一个程序遇到IO操作,操作系统会立刻剥夺该程序的执行权限(提高了cpu的利用率,并且不影响程序的执行效果) # 2.当一个程序长时间占用cpu,操作系统会立刻剥夺该程序的执行权限(降低了程序的运行效率,但是玩出了并发的效果)
-
进程
python""" 程序:就是一堆死代码 进程:程序正在执行的过程 """ # 进程的调度算法 """ 先来先服务调度算法 短作业优先调度算法 时间片轮转法+多级反馈队列 """
-
进程运行的三状态图
python""" 就绪态:一切程序必须要先经过就绪态,才能进入运行态 运行态:正在被cpu执行 阻塞态:程序遇到IO操作了 理想:我们希望我们开发的程序一直处于就绪态和运行态之间 """
-
两对重要概念
-
同步与异步
python"""任务的提交方式""" 同步 任务提交之后原地等待返回结果期间不做任何事情 异步 任务提交之后不原地等待返回结果执行下一行代码 结果由异步回调机制做处理
-
阻塞与非阻塞
python"""程序运行的状态""" 阻塞:阻塞态 非阻塞:就绪态, 运行态
上面的两对概念通常组合出现,但是最常用的就是异步非阻塞
-
-
开启进程的两种方式
python"""参考之前的代码"""
-
join方法
python"""主进程等待子进程代码运行完毕后再往下执行代码"""
-
进程间数据是相互隔离的