zoukankan      html  css  js  c++  java
  • pythonNet 04多任务编程进程

    poll的多路复用
    p =select.poll()
    功能:创建poll对象
    返回值:poll对象

    p.register(fd,event)
    功能:注册要关注的IO事件
    参数: fd 要关注的IO对象
            event 选择要关注的事件
                常用时间类型: POLLIN 读IO事件 rlist
                               POLLOUT 写IO事件 wlist
                               POLLERR 出错IO   xlist
                               POLLHUP 连接断开事件
       e.g  p.register(sockfd,POLLIN |POLLERR)

    p.unregister(fd)
    功能:取消对IO的关注
    参数:IO对象或文件描述符

    event =p.poll
    功能:阻塞等待监控的IO事件发生
    返回值:返回一个列表,event 是一个列表,格式如下:
            [(fileno,event),()...]
            其中每个元组为一个就绪的IO事件
            元组中有该IO的fileno和就绪的事件类型

    *需要字典配合通过fileno查找对应的IO事件对象
    {fileno:io_boj}    e.g. {sockfd.fileno():sockfd}

    poll_server步骤
    1.创建套接字
    2.将套接字设置为关注
    3.创建查找字典,并维护
    4.循环监控IO发生
    5.处理发生的IO事件

    epoll方法实现IO多路复用

    使用方法: 基本与poll方法相同
    *生成对象改为epoll()方法
    *事件类型改为EPOLL类型

    epoll特点

    *epoll效率比select和poll要高
    *epoll的IO监控数量比select要多
    *触发方式多(边缘触发)

    发送更丰富的数据结构

    struct模块 结构化数据
    原理; 将数据转化为bytes格式,并且可以将bytes格式数据转换回来

    Struct(fmt)
    功能;生成struct对象
    参数:fmt 定制的数据结构组成

            e.g.
                要发的数据: 1b'zhang'1.75
                组织的类型格式:Struct('i5sf')

            python类型   fmt
            int           i
            float         f
            bytes         ns(n代表几个字符)
    返回:struct对象

    st.pack(v1,v2,v3...)
    功能:将数据按照制定格式打包转换为bytes
    参数;要发送的数据
    返回:打包后的bytes字串

        e.g.    st.pack(1,b'zhang',1.75)
    st.unpack(bytes_data)
    功能;将bytes字串解析为制定个数数据
    参数;要解析的bytes字串
    返回;元组,为解析后的内容

    *struct模块可以直接调用pack() unpack()
    此时两个函数第一个参数为fmt
    e.g.
    struct.pack('i5sf',1,b'zhang',1.75)


    本地套接字

    功能: 本地两程序之间发送数据消息
    创建流程:
        1.创建本地套接字
         sockfd =socket(AF_UNIX,SOCK_STREAM)
        2.绑定本地套接字文件
        sockffd.bind(path)
        3.监听
        sockfd.listen()
        4.消息收发
        send,recv

    多任务编程

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

    定义:通过一定的编程手段,在一个程序运行中可以同时利用计算机执行多个任务,以此提高程序运行效率
    实现方案;多进程   多线程
    并发:同时处理多个任务,内核在人物间不断地切换达到好像多个任务均被同等执行的效果,实际每个时刻只有一个任务
        占用内核

    并行:多个任务利用计算机多核资源在同时执行,此时多个任务间为并行关系


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

    程序:是一个可执行文件,是静态的占有磁盘空间
    进程:进程是一个动态的过程,占有计算机资源,有一定生命周期

    进程诞生
    1.用户空间通过调用程序接口或者命令发起进程创建请求
    2.操作系统接受用户请求,开始创建进程
    3.操作系统分配计算机资源,确定进程状态,开辟空间等
    4.操作系统将穿件的进程提供给用户使用


    一些概念

    cpu时间片:如果一个进程占有cpu内核则称这个进程在cpu时间片上

    PCB(进程控制块):在内存中开辟的一块空间存放进程的基本信息

    进程ID(PID):系统为进程分配的ID号,每个进程不重复
        命令:ps -aux

    父子进程:系统中每一个进程都唯一的父进程,可以有多个或0个子进程,这样形成父子进程关系

        查看进程树 pstree

    进程状态

        三态;就绪态:进程具备执行条件,等待系统分配cpu资源,
              运行态:进程占有cpu时间片正在运行
              等待态:进程暂时阻塞不具备执行条件


        五态:(增加新建态,和终止态)
            新建态:创建一个新的进程,获取系统资源
            终止态:进程结束,释放系统资源的过程
           
           查看命令:ps -aux --> STAT列
                S 等待态(短暂等)
                D等待态(一直等)
                T等待态
                R运行态
                Z僵尸进程

    进程优先级
        作用:决定进程的优先权限和占有资源的优先程度

        查看命令:top 动态查看进程优先级

        linux优先级范围: -20 --19 数字越小优先级越高

        指定优先级运行程序:
        nice -9 python3 while.py 以9的优先级运行
        nice --9 python3 while.py 以-9的优先级运行

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

     

    进程的特征
       
        1.进程可以使用计算机的多核资源
        2.进程是计算机分配资源的最小单位
        3.进程之间互不影响,各自独立运行
        4.每个进程的空间独立,各占有自己的空间资源
     
    要求;
        1.什么是进程,进程和程序的区别
        2.进程特征有哪些
        3.进程都有哪些状态,各种状态如何转换

     

    多进程编程
    import os
    pid =os.fork()
    功能:创建新的进程
    参数:无
    返回值:失败返回一个负数,
            成功:在原进程中返回新进程的pid号
                    在新进程中返回0

    注意:
        *子进程会复制父进程的全部代码段和内存空间
        *子进程会fork的下一句开始执行
        *if elif else 结构判断fork返回值的不同从而使父子进程执行不同的代码几乎是固定的搭配
        *父子进程各自独立运行,运行顺序不一定
        *子进程有自己特有的内容比如PID 进程控制块 命令集

     

     

     

     

     

     

     

  • 相关阅读:
    python
    HTTP和HTTPS协议,详解
    常用加密算法之非对称加密算法
    Docker容器数据卷-Volume详解
    使用nsenter进入docker容器后端报错 mesg: ttyname failed: No such file or directory
    Docker 查看容器 IP 地址
    Docker容器数据卷volumes-from
    Docker 进入容器的4种方法
    Jmeter之Bean shell使用(二)
    Jmeter之Bean shell使用(一)
  • 原文地址:https://www.cnblogs.com/sky-ai/p/9812969.html
Copyright © 2011-2022 走看看