多任务编程与进程

  • 多任务编程

    意义:充分利用计算机的资源提高程序的运行效率

    定义:通过应用程序,利用计算机的多个核心达到同时执行多个任务的目的,以此    提高计算机运行效率
    实施方案:多进程    多线程
    并行:多个计算机核心在同时处理多个任务,这时多个任务间是并行关系

    并发:同时处理多个任务,内核在多个任务间不断的切换达到好像都在处理运行
            的效果,但实际一个时间点内核只能处理其中一个任务.

  • 进程(process)

    定义:程序在计算机中的一次运行过程

    程序:是一个可执行的文件,是静态的占有磁盘空间,不占有计算机的运行资源

    进程:进程是一个动态过程的描述,占有计算机的资源,有一定的生命周期

    *同一个程序的不同运行过程时不同的进程,占有资源和生命周期都不一样

    进程的创建流程:
        1.用户空间通过运行程序的调用接口发起创建进程
        2.操作系统接受用户请求,开始创建进程
        3.操作系统分配计算机资源,确定进程状态,并开辟进程空间等工作
        4.操作系用将创建好的进程提供给应用程序使用

cpu时间片
    如果一个进程占有计算机核心,我们称为该进程占有计算机cpu时间片

    *多个任务之间争夺cpu之间的关系
    *谁占有cpu最终是操作系统决定

PCB(进程控制块)
    在内存中开辟的一块空间,用来记录进程的信息

    *进程控制块是操作系统查找识别进程的标志

    进程信息:ps -aux

PID(process ID)
    在操作系统中每一个进程都有一个唯一的ID号用来区别于其他进程.ID号由操作系统自动分配,是一个大于0的整数

父子进程
    在系统中除了初始化进程,每一个进程都有一个父进程,可能有0个或着多个子进程,由此形成父子进程关系.

查看进程数: pstree
查看父进程PID: ps -ajx

进程的状态
    三态
        *就绪态:进程具备执行条件等待系统分配资源
        *运行态:进程占有cpu处于运行状态
        *等待态:进程暂时不具备执行条件,阻塞等待满足条件后再执行

    五态(三态基础上增加新建态,终止态)
        *新建态:创建一个新的进程,获取资源的过程
        *终止态:进程执行结束,资源释放回收的过程
    ps -aux---->STAT
    S  等待态  (可中断等待)
    D  等待态  (不可中断等待)
    T  暂停态  (暂停状态)
    R  运行态  (包含就绪态)
    Z  僵尸进程

    <  进程优先级较高
    N  优先级较低
    l  有子进程的
    s  会话组组长
    +  前台进程

进程优先级
    作用:决定了一个进程的执行权限和占有资源的有限程度

查看进程优先级
    top  动态查看系统中的进程信息,用<>翻页
    取值范围 -20--19     -20优先级最高

使用指定的优先级运行程序
    nice: 指定运行的优先级

    eg: nice -9 ./while.py   以优先级9运行
        nice --9 ./while.py  以-9优先级运行


进程特征
    1.进程之间运行互不影响,各自独立运行
    2.进程是操作系统分配资源的最小单位
    3.每个进程空间独立,各自占有一定的虚拟内存
    创建一个个接口,然后创建进程

要求:
    1.什么是进程,进程和程序的区别
    2.了解进程特征
    3.清楚进程每种状态,以及状态之间的转换关系

 

  • 多进程编程

import os
os.fork()
功能: 创建新的进程
参数: 无
返回值:

       失败:返回一个负数
       成功: 在原有进程中返回新的进程的PID号,在新的进程中返回0

  *子进程会复制父进程全部代码段,包括fork之前产生的内存空间
  *子进程从fork的下一句开始执行,与父进程互不干扰
  *父子进程的执行顺序是不一样的,父子进程共用一个终端显示
  *父子进程通常会根据fork返回值的差异选择执行不同的代码,
    所以if结构几乎是fork的固定搭配
  *父子进程空间独立,操作的都是本空间的内容,互不影响
  *子进程也有自己的特性,如:PID号,PCB命令集等

# fork.py
import os
from time import sleep
print("***********************************")
a = 1
pid = os.fork() #父 子进程同时运行,子进程运行后面的if判断

if pid < 0:
    print('创建进程失败')
elif pid == 0:
    print('这是新的进程')
    print('a = ', a)  # a = 1
    a = 10000
else:
    sleep(1)
    print('这是原有的进程')
    print('a = ', a)
print('演示结束')
# 运行结果显示:
# ***********************************
# 这是新的进程
# a =  1
# 演示结束
# 这是原有的进程
# a =  1
# 演示结束

进程相关函数

    获取进程PID
        os.getpid()
        功能:获取当前进程的进程号
        返回值: 返回进程号

        os.getppid()
        功能:获取当前进程父进程的PID号
        返回值: 返回进程号
    进程退出
        os._exit(status)
        功能: 进程退出
        参数: 进程的退出状态

        sys.exit([status])
        功能: 进程退出
        参数: 数字表示退出状态,不写默认为0
             字符串,表示退出时打印的内容
        sys.exit 可以通过捕获SystemExit异常阻止退出

# exit.py
import os, sys

# 结束进程后不再执行后面的内容
# os._exit(0)
try:
    sys.exit('hello world')
except SystemExit as e:
    print('退出', e)

print('process exit')

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值