zoukankan      html  css  js  c++  java
  • day34-并发编程

    多进程

    进程和程序的区别

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

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

    一旦运行就产生了进程

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

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

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

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

      本地IO input print sleep read write

      网络IO recv send

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

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

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

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

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

    三种状态的切换

     

    程序员永恒的话题

    提高效率

    根本方法就是让程序尽可能处于运行状态

    减少IO 尽可能多占用CPU时间

    缓冲区就是用于减少IO操作的

    进程的创建以及销毁 了解

    菜谱: 就是程序

    做菜的过程:就是进程

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

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

     

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

     

    import os
    from multiprocessing import  Process
    class MyProcess(Process):
        def __init__(self,name):
            super().__init__()
            self.name = name
        # 继承Procee覆盖run方法将要执行任务发到run中
        def run(self):
            print(self.name)
            print("子进程 %s running!" % os.getpid())
            print("子进程 %s over!" % os.getpid())
    
    if __name__ == '__main__':
        # 创建时 不用再指定target参数了
        p = MyProcess("rose")
        p.start()
        print("父进程over!")

    join函数 (重点)

    Process的对象具备一个join函数

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

    常用属性

    # p.join() # 等待子进程结束
    # p.terminate()  # 终止进程
    # print(p.name)  # 进程的名称
    # print(p.is_alive()) #是否存活
    # p.terminate() # 与start一样 都是给操作系统发送指令 所以会有延迟
    # print(p.is_alive())
    # print(p.pid)
    # print(p.exitcode) # 获取退出码

    僵尸与孤儿进程 了解

    孤儿进程

    指的是,父进程先结束 ,而子进程还在运行着,

    孤儿进程无害,有 其存在的必要性

    例如:qq开启了浏览器,qq先退出了 浏览器应该继续运行

    孤儿进程会被操作系统接管

    僵尸进程

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

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

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

    python会自动回收僵尸进程

     

  • 相关阅读:
    The xp_cmdshell proxy account information cannot be retrieved or is invalid. Verify that the '##xp_cmdshell_proxy_account##' credential exists and contains valid information.
    SQL SERVER-创建Alwayson
    Powershell-远程操作
    powershell-将powershell脚本排到JOB
    powershell-脚本运行权限政策
    Winserver-默认以管理员运行程序
    Powershell-创建Module
    SQL SERVER-查询爆破sa密码的主机
    power-virus
    141.Linked List Cycle 快慢指针
  • 原文地址:https://www.cnblogs.com/klw1/p/10956241.html
Copyright © 2011-2022 走看看