多进程笔记

昨日课程回顾:

  编程语言的发展:

    机器语言:  二进制

    汇编语言:  指令

    高级语言:  面向过程(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为普通进程)

      守护进程的两个特点:

        守护进程会随着父进程的结束而结束

        守护进程不能再创建子进程(不能要孩子)

 

 

 

posted @ 2019-11-30 17:18  hou3037  阅读(182)  评论(0编辑  收藏  举报