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.父进程执行完毕之后并不会直接结束程序
而是等待所有的子进程都执行完毕之后才结束]
父进程要负责回收子进程的资源