多任务编程
意义:充分利用计算机资源,同时运行多个任务,提高任务整体的运行效率
定义:通过程序利用计算机的多个核心达到同时执行多个任务的目的。以此达到提成程序运行效率的目的
并行:多个计算机和性在同时处理多个任务,这时多个任务之间是并行关系
并发:同时运行多个任务,内核在多个任务间不断切换,达到多个任务都会被执行的处理效果,此时多个任务间时并发关系
进程:程序在计算机重的一次执行过程
程序:是一个可执行文件,是静态的,占有磁盘,不占计算机的运行资源
进程:进程是一个动态的过程,占有计算机资源,有一定的生命周期
×同一个程序不同的运行过程时不同的进程,因为分配的资源和生命周期都不相同
进程的创建流程
1.用户启动一个程序或者调用接口发起进程创建
2.操作系统接受用户请求分配计算机资源创建进程
3.操作系统将一定状态的进程提供给用户使用
4.用户利用操作系统提供的进程完成任务
进程相关的概念
cpu时间片
如果一个进程占有cpu此时我们称为该进程占有cpu时间片
多个进程任务会轮流占有cpu时间片形成并发效果
PCB进程控制块
进程创建后会自动在内存产生一个空间存放进程信息。
进程信息:进程的ID 进程占有内存的位置,创建时间,创建用户。
查看系统该进程信息:ps -aux
D:等待态 阻塞–>不可中断等待态
S:等待态 睡眠–>可中断等待态
T:等待态 暂停–>暂停执行
R:运行态(就绪态)
Z:僵尸
+:前台进程 (在终端运行)
<:较高优先级的进程
N:较低优先级的进程
s:会话组
l:有进程链接
进程的优先级
取值范围:-20----19 (-20最高)
nice:以指定的优先级运行一个程序
nice -9 程序名—>以9的优先级运行程序
sudo nice --9 程序名 —>以-9的优先级运行程序(优先级越小优先级越高)
PID(process ID):在操作系统中每个进程都有唯一的PID值是由系统分配的。
进程特征
×进程时操作系统分配资源的最小单元
×每个进程拥有自己独立的运行空间(虚拟内存空间)
×进程之间的运行相互独立互不影响
进程的状态
三态
×就绪态:进程具备执行条件,等待系统分配处理器资源进入运行态
×运行态:进程占有cpu处于运行状态
×等待态:进程暂时不具备运行条件,需要阻塞等待
五态(三态的基础上增加新建和终止)
×新建:创建一个新的进程,获取系统资源的过程
×终止:进程执行结束,释放资源的过程
父子进程
在系统中除了初始化进程每个进程都有一个父进程,可能由0个或多个子进程。由此形成进程间的父子关系
便于进程管理,父进程发起创建子进程要求
查看进程树:pstree
查看父进程PID:ps -ajx
要求:
1.什么时进程,进程和程序的区别
2.了解进程的特征和基本概念
3.理解并发并行的区别
4.清楚进程的状态即转换
os.fork 创建进程
pid = os.fork()
功能:创建进程
返回值:
×失败:返回一个负数
×成功:在原有进程中返回新进程的PID号,在新进程中返回0
- 子进程会复制父进程全部内存空间包括代码端
- 子进程会从fork的下一句开始执行
- 父进程中fork返回值即为新创建子进程的PID号
- 父子进程不一定谁先执行,执行上互不干扰抢占时间片
- 使用if语句结构使父子进程执行不同的代码几乎时fork创建进程的固定结构
- 在子进程中对变量等其他内容的修改,不会影响父进程中的内容
- 子进程虽然复制父进程内容,但是也有自己的特有属性特征。比如:PID号,PCB内存区间等
获取进程PID
os.getpid()
功能:获取进程的PID
返回值:返回进程的PID号
os.getppid()
功能:获取父进程的PID
返回值:返回父进程的PID号
进程退出
os._exit(status)
功能:退出一个进程
参数:进程的推出状态 整数
sys.exit([status])
功能:退出一个进程
参数:默认0,如果传入一个整数则同_exit(),传入一个字符串,则在对出时打印该字符串
作业:进程fork理解,熟悉进程理论