多进程笔记
昨日课程回顾:
编程语言的发展:
机器语言: 二进制
汇编语言: 指令
高级语言: 面向过程(C) 面向对象(Python)
操作系统的目标:
为用户更方便的使用
并行:指两件或多间事情,在同一时间点同时执行
并发:指两件或多见事情,在同一时间间隔内同时执行
计算机组成:
CPU,主板,储存,输入,输出
进程由三部分组成:
代码段,数据段,PCB(进程控制块)
进程的特征:
动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。
并发性:任何进程都可以同其他进程一起并发执行
独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;
异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进
多个不同的进程可以包含相同的程序:一个程序在不同的数据集里就构成不同的进程,能得到不同的结 果;但是执行过程中,程序不能发生改变。
进程的三个基本状态:
就绪状态:获得了除CPU之外运行的所有资源
执行状态:获得了所有资源,处于正在执行的状态
阻塞状态:因为各种原因,导致进程放弃了CPU,导致进程无法继续执行,此时进程处于内存中
dos系统: 单用户单任务
windows系统: 单用户多任务(早期的windows)
unix系统: 多用户多任务
为什么要有操作系统?
1 封装了所有硬件的接口,是用户更方便的使用
2 对于计算机内所有资源,进行一个合理的调度和分配
多进程的模块:
multiprocessing
process
并行 : 并行是指两者同时执行,比如有两条车道,在某一个时间点,两条车道上都有车在跑;(资源够用,比如三个线程,四核的CPU )
并发 : 并发是指资源有限的情况下,两者交替轮流使用资源,比如只有一条车道(单核CPU资源),那么就是A车先走,在某个时刻A车退出把道路让给B走,B走完继续给A ,交替使用,目的是提高效率。
并行是从微观上,也就是在一个精确的时间片刻,有不同的程序在执行,这就要求必须有多个处理器。
并发是从宏观上,在一个时间段上可以看出是同时执行的,比如一个服务器同时处理多个session。
早期单核CPU时候,没有并行的概念,只有并发(微观上串行,宏观上并行)
站在CPU角度看 站在人的角度看就是同时有很多任务同时执行
在了解其他概念之前,我们首先要了解进程的几个状态。在程序运行的过程中,由于被操作系统的调度算法控制,程序会进入几个状态:就绪,运行和阻塞。
(1)就绪(Ready)状态
当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态。
(2)执行/运行(Running)状态当进程已获得处理机,其程序正在处理机上执行,此时的进程状态称为执行状态。
(3)阻塞(Blocked)状态正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件可有多种,例如,等待I/O完成(input)、申请缓冲区不能满足、等待信件(信号)等。
同步:
所谓同步就是一个任务的完成需要依赖另外一个任务时,只有等待被依赖的任务完成后,依赖的任务才能算完成,这是一种可靠的任务序列
。要么成功都成功,失败都失败,两个任务的状态可以保持一致。
异步:
所谓异步是不需要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工作,依赖的任务也立即执行,只要自己完成了整个任务就算完成了
。至于被依赖的任务最终是否真正完成,依赖它的任务无法确定,所以它是不可靠的任务序列
。
from multiprocessing import Process
获取当前进程的pid号, os.getpid()
获取当前进程的父进程的pid号, os.getppid()
开启子进程的方式:
1 p = Process (target = func,args=(,))
target : 是子进程要执行的任务
arges:是父进程给子进程传递的参数(必须是元组的形式)
2 自定义类,去继承Process
进程的常用方法:
(1) start() 开启一个子进程
(2) join() 异步变同步(就是让父进程停留在join这句话,等待子进程执行结束,父进程在继续执行)
(3) is_alive() 判断进程是否还活着
(4) terminate() 杀死进程
进程的常用属性:
(1) p.name = 给p进程一个名字
(2) p.pip 返回p进程的pid
(3) p.daemon=True 及那个p进程设置位守护进程.(True为守护进程,Flase为普通进程)
守护进程的两个特点:
守护进程会随着父进程的结束而结束
守护进程不能再创建子进程(不能要孩子)