1. 操作系统的历史
第一代计算机:
特点:
a. 在一定的时间内,程序员独享整个计算机的资源
b. 没有操作系统的概念, 直接操作的是硬件设备
缺点:
a. 浪费计算机资源,一个时间段内只有一个人用。
b. 同一时刻只有一个程序在内存中,被cpu调用执行,比方说10个程序的执行,是串行的
第二代计算机:
特点:
a. 批处理系统解决一个人使用的问题
缺点:
1.整个流程需要人参与控制,将磁带搬来搬去(中间俩小人)
2.计算的过程仍然是顺序计算-》串行
3.程序员原来独享一段时间的计算机,现在必须被统一规划到一批作业中,等待结果和重新调试的过程都需要等同批次的其他程序都运作完才可以(这极大的影响了程序的开发效率,无法及时调试程序)
第三代计算机:
串行问题:
a. 多道处理技术 (*******************)
1. 时间的复用
cpu在多个任务之间不断的进行切换
2. 空间的复用
多个任务必须开辟属于自己的内存空间 (物理级别的隔离)
相关概念:(*******************)
cpu: 计算执行任务的 不会执行IO操作
cpu切换的条件:
1. 遇到IO操作,就切换
2. 遇到优先级比较高的任务会进行切换
3. 如果某一个任务长时间占用CPU资源,也会切换 , 要所有的任务雨露均沾
a. 串行 : 程序一个接一个的执行
b. 并发 : 单个CPU执行多个程序任务, CPU在程序之间不断的进行切换, 感觉好像是并行 (伪并行)
c. 并行 : 多个CPU同时执行多个程序任务
进程的概念:
进程和程序的区别:
程序:静态的程序代码
进程:正在运行的程序
2. 开启进程的方式
子进程的开启耗费的资源和时间是比较长的
a. 父进程没死, 子进程还在运行, 但是父进程不发送wait()/waitpid()给子进程, 僵尸进程
b. 父进程死了, 子进程还在运行, 此时子进程就是孤儿进程, 会被init进程(0)接管
两种方式:
1. 函数 (**********************)
2. 类
应用:
1. 爬虫的时候
2. cmdb 收集数据 开启多个进程帮我们汇报
python:
1. 数据分析 (python科学计算 (numpy matplotlib 词云) ancoando)
2. web开发 (前端 django flask)
3. 自动化运维 (cmdb 自动报修 )
3. 进程的一些属性 (*********************************)
p.pid() : 获取进程id
os.getpid() : 获取进程id
os.getppid() : 获取父进程id
p.name:进程的名称
p.daemon:默认值为False,如果设为True,代表p为后台运行的守护进程,当p的父进程终止时,p也随之终止,并且设定为True后,p不能创建自己的新进程,必须在p.start()之前设置
p.is_alive():如果p仍然运行,返回True
4. 进程之间的通信
进程和进程之间的数据是物理隔绝的
a. 文件 (硬盘级别)
mutex
b. IPC机制(队列 内存级别)
队列
生产者消费者模型:(*********************************)
实现方式:
1. python代码实现
2. rabbitmq kafka rocketmq
应用场景:
a. weibo消息队列
5. 开启线程的方式
待补充
6. 线程的一些属性
待补充