进程+队列

8.9内容整理和概述

今日内容概要

内容目录

  • 进程
  • join方法
  • 队列

进程

程序:一堆躺在文件上的死代码
进程:正在被运行的程序(活的)

进程调度算法演变:
	1.先来先服务算法:
		谁先来先调谁,针对耗时比较短的程序不友好
	2.短作业优先调度:
    	先调短的程序,针对耗时比较长的程序不友好
	3.时间片轮转法+多级反馈队列
		1.先平分时间给所有进程
		2.多次分配后,进程持续越长分配的时间额度越多,优先级越低
        
并行:多个进程同时执行(等单位的CPU)
并发:单cpu做到类似多个进程同时执行的效果

进程的三状态:(就绪,阻塞,运行)
	1.所有的进程要想被运行,必须先经过就绪态
	2.运行过程中如果出现了IO操作,则进入阻塞态
	3.运行过程中如果时间片用完,则继续进入就绪态
	4.阻塞态要想进入运行态必须先经过就绪态

"进程的提交状态"  
同步:提交完任务之后原地等待任务的结果,期间不做任何事
异步:提交完任务之后不原地等待直接去做其他事,结果自动提醒

"进程的执行状态"
阻塞:阻塞态
非阻塞:就绪态 运行态

"进程态"
同步阻塞
同步非阻塞
异步阻塞
异步非阻塞

"进程创建"
代码创建进程:
	1.Process(target=目标函数, args=目标函数传参(元组)): 创建一个进程对象
	2.继承Process类,派生
    
"进程数据默认隔离"
解释:多个进程数据彼此之间默认是相互隔离的
解除隔离方法:需要借助于'管道'或者'队列'

"进程方法"
方法:
	1.查看进程号:
		1.current_process().pid(current_process模块):查看当前进程号
		2.os.getpid():查看当前进程号
		3.os.getppid():查看父进程号
	2.销毁子进程:进程.terminate()
	3.判断进程是否存活:进程.is_alive()
    
"特殊进程"
守护进程:
	定义:伴随着守护对象的存活而存活,死亡而死亡的进程
	使用:
		1.进程.daemon = True
		2.必须在进程start之前执行
僵尸进程:
	定义:进程已经运行结束,但是相关的资源并没有完全清空的进程
	# 父进程参与回收资源
孤儿进程:
	定义:子进程正常运行,父进程意外死亡的进程
	# 操作系统会自动分配"福利院"接收

join方法

join:主进程等待子进程(调用join进程)运行结束之后再运行

队列

定义:一种特殊的线性表,数据在前端进行删除操作,而在表的后端进行插入操作,即"先进先出"
使用:multiprocessing模块的Queue
方法:
	1.Queue(个数):创建队列,并规定容纳的数据个数
	2.put(数据):往队列添加数据
	3.full():判断队列是否已经存满
	4.empty():判断队列是否为空
	5.get():向队列前端获取下一个数据,如果超出数据获取极限,程序等待并处于阻塞态,直到队列中有数据被添加
	6.get_nowait():向队列前端获取下一个数据,如果超出数据获取极限,直接报错
    
"注意":多进程下,有些方法不能准确使用!
posted @ 2022-08-09 22:08  维生素Z  阅读(22)  评论(0)    收藏  举报