5.31—034—周五

几日所学内容:

    一、多进程:

    二、阻塞 非阻塞 并行 并发

    三、三种状态的切换

    四、进程的两种使用方式

    五、join 函数  (重点)

    六、孤儿进程与僵尸进程

    七、常用属性

一、多进程:

进程:一个正在被运行的程序就称之为进程,是程序具体执行过程,一种抽象概念,进程来自于操作系统

  创建新的进程方式:

    1、系统初始化

    2、一个进程在运行过程中开启了子进程

    3、用户的交互式请求,而创建一个新程序

    4、一个批处理作业的初始化(只在大型机的批处理系统中应用)

进程与程序的区别:

  程序就是一堆计算机可以识别文件,程序在没有被运行时就是存在硬盘上的一堆二进制

  运行程序时,要从硬盘读取数据到内存中,CPU从内存读取指令并执行

  程序一旦运行就产生了进程

一个程序可以多次执行 产生多个进程,但是进程之间相互独立

当我们右键运行了一个py文件时 ,其实启动的是python解释器,你的py文件其实是当作参数传给了解释器

二、阻塞  非阻塞  并行  并发      (重点)

    阻塞 : 程序遇到io操作是就进入了阻塞状态

      本地IO:input  print  sleep  read  write

      网络IO:recv  send

    非阻塞: 程序正常运行中 没有任何IO操作 就处于非阻塞状态

  阻塞 非阻塞 说的是程序的运行状态

    并发: 多个任务看起来是在同时处理,本质上是切换执行,只不过是切换速度非常快

    并行: 多个任务真正的同时执行,必须具备多核CPU,才可能并行

  并发 并行 说的是 任务的处理方式

三、三种状态的切换

  就绪态,运行态,阻塞态

          

  多道技术会在进程执行时间过长或遇到IO时自动切换其他进程,意味着IO操作与进程被剥夺CPU执行权都会造成进程无法继续执行

程序员永恒的话题:提高效率

  根本方法就是让程序尽可能处于运行状态;减少IO 尽可能的多占用CPU时间;缓冲区就是用于减少IO操作的

四、进程的两种使用方式:      (重点)

  1、直接实例化Process ,将要执行任务用target传入

    from multiprocessing import  Process

  2、继承Process类 ,覆盖run方法 将任务放入run方法中

  3、在windows下,开启子进程必须放在 if __name__ == '__main__' 下运行,因为windows在开启子进程时会重新加载所有的代码造成递归创建进程

五、join 函数  (重点)

  Process的对象具备一个join函数

  用于提高子进程优先级 ,使得父进程等待子进程结束

六、孤儿进程僵尸进程

孤儿进程:

  指的是,父进程先结束 ,而子进程还在运行着,孤儿进程无害,有其存在的必要性

  例如:qq开启了浏览器,qq先退出了 浏览器应该继续运行,孤儿进程会被操作系统接管

僵尸进程:

  指的是:子进程已经结束了,但是操作系统会保存一些进程信息,如PID,运行时间等,此时这个进程就称之为僵尸进程

  僵尸进程如果太多将会占用大量的资源,造成系统无法开启新新进程

  linux 中有一个wai/waitpid 用于父进程回收子进程资源

  python会自动回收僵尸进程

七、常用属性:

  p.join()          # 等待子进程结束

  p.terminate()       # 终止进程

  print(p.name)       # 进程的名称

  print(p.is_alive())    # 是否存活

  p.terminate()       # 与start一样 都是给操作系统发送指令 所以会有延迟

  print(p.is_alive())    # 这个进程是否还存活

  print(p.pid)       # 得到ip

  print(p.exitcode)     # 获取退出码

 

猜你喜欢

转载自www.cnblogs.com/Chinesehan/p/10957019.html