zoukankan      html  css  js  c++  java
  • 多进程笔记

    昨日课程回顾:

      编程语言的发展:

        机器语言:  二进制

        汇编语言:  指令

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

          守护进程的两个特点:

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

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

  • 相关阅读:
    华为机试题 二叉查搜索树 判断两序列是否为同一二叉搜索树序列
    华为机试题 火车进站
    Linux命令学习 rmdir
    Linux命令学习 rm
    Linux命令学习 mkdir
    Linux命令学习 du
    Linux命令学习 pwd
    Linux命令学习 ls
    Linux命令学习 cd
    伪代码编程过程
  • 原文地址:https://www.cnblogs.com/jerry-hou/p/11963266.html
Copyright © 2011-2022 走看看