python-关于进程

image

操作系统的发展史

1、穿孔卡片时代 ->CPU的利用率极低
2、联机批处理系统->将多个程序一次性录入磁带中,之后交由输入机输入并由CPU执行
3、脱机批处理系统->现代计算机的雏形(远程输入,高速磁带,主机)

多道技术

本文讨论的多道技术,以单核CPU为前提
多道技术的本质:切换和保存状态
image

🌹解释:

cpu工作机制
1、当某个程序进入io状态的时候,操作系统会自动剥夺该程序的CPU执行权限
2、当某个程序长时间地占用cpu的时候,操作系统也会剥夺该程序的cpu的执行权限。

并行和并发

并行:多个程序同时执行
并发:多个程序只要看起来同时运行即可

进程和程序

一、两者区别

1、程序指的是一堆代码
2、进程指的是正在运行的程序

二、单核情况下的进程调度

进程调度算法的演变
1、FCFS 先来先服务-->对短作业不友好
2、短作业优先调度算法-->对长作业不友好
3、时间片轮转法+多级反馈队列

时间先分配给多个进程相同的时间片
之后根据进程消耗的时间片多少分类。。。

image

三、进程三状态图

image

四、同步和异步-->用于描述任务的提交方式

同步:提交完任务之后在原地等待任务的返回结果,期间不做任何事情
异步:提交完任务之后不在原地等待任务的返回结果,直接去做其他事情,结果由反馈机制自动提醒

五、阻塞与非阻塞-->用于描述任务的执行状态

阻塞:上述图中的阻塞态
非阻塞:上述图中的就绪态,运行态

六、创建进程

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() 判断进程是否存活

posted @ 2022-01-13 16:44  JudyJU  阅读(45)  评论(0)    收藏  举报