python-关于进程

操作系统的发展史
1、穿孔卡片时代 ->CPU的利用率极低
2、联机批处理系统->将多个程序一次性录入磁带中,之后交由输入机输入并由CPU执行
3、脱机批处理系统->现代计算机的雏形(远程输入,高速磁带,主机)
多道技术
本文讨论的多道技术,以单核CPU为前提
多道技术的本质:切换和保存状态

🌹解释:
cpu工作机制
1、当某个程序进入io状态的时候,操作系统会自动剥夺该程序的CPU执行权限
2、当某个程序长时间地占用cpu的时候,操作系统也会剥夺该程序的cpu的执行权限。
并行和并发
并行:多个程序同时执行
并发:多个程序只要看起来同时运行即可
进程和程序
一、两者区别
1、程序指的是一堆代码
2、进程指的是正在运行的程序
二、单核情况下的进程调度
进程调度算法的演变
1、FCFS 先来先服务-->对短作业不友好
2、短作业优先调度算法-->对长作业不友好
3、时间片轮转法+多级反馈队列
时间先分配给多个进程相同的时间片
之后根据进程消耗的时间片多少分类。。。

三、进程三状态图

四、同步和异步-->用于描述任务的提交方式
同步:提交完任务之后在原地等待任务的返回结果,期间不做任何事情
异步:提交完任务之后不在原地等待任务的返回结果,直接去做其他事情,结果由反馈机制自动提醒
五、阻塞与非阻塞-->用于描述任务的执行状态
阻塞:上述图中的阻塞态
非阻塞:上述图中的就绪态,运行态
六、创建进程
1、方式一
from multiprocessing import Process
def test(i):
print('%s is running' % i)
if __name__ == '__main__':
p=Process(target=test,args=('judy',))
p.start()
print('who is running??')
2、方式二
from multiprocessing import Process
class My_Test(Process):
def __init__(self, i):
super().__init__()
self.i = i
def run(self) -> None:
print('%s is running' % self.i)
if __name__ == '__main__':
p = My_Test('judy')
p.start()
print('who is running??')
七、进程的join方法
from multiprocessing import Process
def test(i):
print('%s is running' % i)
if __name__ == '__main__':
p=Process(target=test,args=('judy',))
p.start()
p.join() # 等子进程结束,再运行下面的代码
print('who is running??')
结果
judy is running
who is running??
八 进程间默认无法交互
from multiprocessing import Process
city='hz'
def chname():
global city
city='sh'
if __name__ == '__main__':
p=Process(target=chname)
p.start()
print(city)
结果
hz
《子进程在运行的时候,会申请一块内存空间,把它父进程的代码都走一遍,所以子进程将city这个变量改完了之后,将其存在了自己的名称空间,而我打印的是全局名称空间的city,仍然是hz》
九、对象方法
1、查看进程号
from multiprocessing import Process,current_process
import os
city='hz'
def chname():
global city
city='sh'
print(os.getgid()) # 方法一、查看进程号
if __name__ == '__main__':
p=Process(target=chname)
p.start()
print(current_process().pid) # 方法二、 查看进程号
print(city)
2、进程的名字,p.name直接默认就有,也可以在实力化进程对象通过关键字的形式传入,name=
3、p.terminate() 杀死子进程
4、p.is_alive() 判断进程是否存活
浙公网安备 33010602011771号