1:操作系统
多道操作系统
有多个程序在操作系统中运行
当一个程序遇到IO操作的时候就把CPU让出来给其他程序使用
分时操作系统
时间片
不是遇到IO操作时让出CPU,而是时间到了就让出CPU
切换程序需要时间,单纯的分时系统没有提高CPU的利用率,但是提高了用户的使用体验
实时系统
个人计算机操作系统
分布式操作系统
2:进程基础
进程 Process id = pid
程序,进程 进程就是运行中的程序
pycharm pid :pid 是全系统中唯一对某个进程的标识:
并且随着程序的重启,pid是会改变的
进程是操作系统中最小的资源分配单位
进程与进程之间的数据是隔离的
进程调度:
先来先服务 FCFS
短作业优先算法
时间片轮转法
多级反馈队列 算法
同步:一个程序执行完毕再执行下一个程序
异步:同时执行多个程序
同步阻塞:不能充分利用CPU
异步阻塞:过度利用CPU
IO多路复用 :比较完善的在网络编程中的解决方案
3:启用进程:
import os import time import multiprocessing def count(): for i in range(10): time.sleep(0.5) print('子进程',os.getpid(),os.getppid()) if __name__ == '__main__': #只是在windows上必须写 print('主进程',os.getpid(),os.getppid()) p = multiprocessing.Process(target=count).start() for i in range(10): time.sleep(0.3) print('*'*i)
给子进程传参:
import os import time import multiprocessing def count(arg): for i in range(10): time.sleep(0.5) print('子进程%s'%arg,os.getppid(),os.getppid()) if __name__ == '__main__': print('主进程',os.getpid(),os.getppid()) p = multiprocessing.Process(target=count,args=(123456,)).start() for i in range(10): time.sleep(0.3) print('*'*i)
进程之间的数据隔离的
import os import time import multiprocessing number = 100 def count(): global number for i in range(100): time.sleep(0.1) number -= 1 print('子进程:',number) if __name__ == '__main__': print('主进程',os.getpid(),os.getpid()) p = multiprocessing.Process(target=count).start() # time.sleep(2) # print('主进程:',number) for i in range(100): time.sleep(0.2) print('主进程:',number)
启用多个进程
import os import multiprocessing def count(arg): print('子进程%s:'%arg,os.getpid(),os.getppid()) if __name__ == '__main__': for i in range(10): p = multiprocessing.Process(target=count,args=(i,)).start()
子进程与父进程之间的关系
import os import time import multiprocessing def count(arg): print('子进程%s:'%arg,os.getpid(),os.getppid()) time.sleep(5) print('子进程end') if __name__ == '__main__': for i in range(10): p = multiprocessing.Process(target=count,args=(i,)).start() print('父进程**********')
1.父进程与子进程的启动时异步的
父进程只负责通知操作系统启动子进程
接下来的工作有操作系统接手,父进程继续运行
2.父进程执行完毕之后并不会直接结束程序
而是等待所有的子进程都执行完毕之后才结束]
父进程要负责回收子进程的资源