python-web--poll-多进程多线程

前情回顾

  1. IO 分类 : 内存输入输出

    • 阻塞IO
    • 非阻塞IO
    • IO多路复用
  2. 阻塞IO : 阻塞函数,执行时间长造成的阻塞。默认IO行为,简单但是效率低。

  3. 非阻塞IO:设置非阻塞行为。超时检测。
    setblocking()
    settimeout()

  4. IO多路复用 : 同时监控多个IO,处理发生的IO事件

    select(rlist,wlist,xlist)

  5. 位运算 : & | ^ << >>


一. 基于 poll 方法的IO多路复用

  1. p = select.poll()
    功能 : 创建poll对象
    返回值 : poll对象

  2. p.register(fd,event)
    功能: 注册关注的IO
    参数:fd 关注的IO

      event  关注的IO事件类型
      常用事件类型: POLLIN 读IO事件(rlist)
      		   POLLOUT 写IO事件 (wlist)
             POLLERR 异常IO  (xlist)
             POLLHUP  断开连接 
    

    e.g. p.register(sockfd, POLLIN|POLLERR)

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

  4. events = p.poll()
    功能:阻塞等待IO事件发生
    返回值 : 就绪的IO
    events格式:[(fd,event),(),()…]

  5. poll_server 步骤

    【1】 创建套接字
    【2】 将套接字register
    【3】 创建查找字典并维护
    【4】 循环监控发生的IO
    【5】 处理发生的IO

二. 基于epoll的IO多路复用

  1. 使用方法 :基本与poll相同

    • 将对象生成 改为 epoll
    • 将所有事件类型改为EPOLL类型
  2. 特点

    • epoll 效率比select和poll要高
    • epoll 能够同时监控IO的数量比select poll要多
    • epoll 的触发方式比poll要多 (EPOLLET边缘触发)

三. struct模块的使用

  1. 原理: 将一组简单的数据进行打包,转换为bytes格式。或者将一组bytes格式数据解包为python的数据类型。

  2. 接口使用

 【1】 st = Struct(fmt)
   功能:生成结构化对象
   参数: fmt 定制的数据结构

   e.g.    数据结构 : 1   b'zhangsan'  1.75
           fmt      :  'i8sf'

 【2】 st.pack(value,...)
       功能 : 将一组数据按照指定格式转换为bytes
   参数 : 要转换的一组数据
   返回值: bytes字节串

 【3】 st.unpack(bytes_data)
       功能 : 将bytes字节串按照指定格式解析
   参数 : 要解析的字节串
   返回值 : 解析后的数据

 【4】 struct.pack(fmt,value,...)
 	   struct.unpack(fmt,bytes_data)
   说明: 通过struct模块直接调用pack,unpack需要加第一个参数为fmt。其他用法相同。

四. 本地套接字

  1. 功能 : 用于本地两个程序之间进行数据收发

  2. 套接字文件 : 用于本地套接字通信时,进行数据传输的介质

  3. 本地套接字通信流程

【1】 创建本地套接字
      sockfd = socket(AF_UNIX,SOCK_STREAM) 

【2】 绑定本地套接字文件
      sockfd.bind(file)
 
【3】 监听,接收连接,收发消息
      listen() -->accept()-->recv/send()

cookie: linux文件类型

b(块设备文件) c(字符设备文件) d(目录) - (普通文件)
l(链接文件) s(套接字文件) p(管道文件)

cookie:
判断文件是否存在: os.path.exists(file)
删除文件 : os.remove(file)

五. 多任务编程

  1. 意义 : 充分利用计算机多核资源,同时运行多个任务,提高程序执行效率。

  2. 实现方案 : 多进程,多线程

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

    并发 : 多个任务都被接受,但是内核在任务间不断切换,达到了好像多个任务都被处理的效果,实际每一时刻只有一个任务占用内核

六. 进程 (process)

  1. 定义 : 程序在计算机中的一次执行过程

    • 程序是一个可执行文件,是静态的,占有磁盘空间
    • 进程是一个动态执行过程,占有计算机运行资源,有一定的生命周期。
  2. 如何产生一个进程
    【1】用户空间通过调用程序或者特定接口发起进程创建
    【2】操作系统接受用户请求,开始创建进程
    【3】操作系统调配计算机资源,确定进程状态等
    【4】操作系统将创建的进程提供给用户使用

  3. 进程概念

    【1】 cpu 时间片:如果一个进程占有cpu内核,则称这个进程占有cpu时间片。

    【2】 PCB(进程控制块):在内存中开辟一块空间,用于存放进程的基本信息,也用于系统对进程的识别。

    【3】 进程ID(PID):系统为每个进程分配一个大于0的整数,作为ID。所有进程ID不会重复。

    Linux命令查看PID: ps -aux

    【4】 父子进程:系统中每一个进程(除了初始进程)都有唯一的父进程,可以有0个或多个子进程。父子进程便于系统对进程的管理。

    查看进程数: pstree
    查看父子进程PID : ps -ajx

    【5】 进程状态

    三态
    就绪态 :进程具备执行条件,等待分配cpu资源
    运行态 :进程占有cpu时间片,正在运行
    等待态 :进程暂停执行,让出cpu

    五态 (增加新建和终止)
    新建态:创建进程获取资源的过程
    终止态:进程结束,释放资源的过程

    STAT列标志

    • 第一个字母表示进程状态

      S 等待态
      D 等待态
      T 等待态
      R 运行态
      Z 僵尸

    • 后面的标志表示进程特征

      < 优先级较高
      N 优先级较低

      + 前台进程
      s 会话组长
      l 有多线程

    1. 进程运行特征

      【1】 进程可以使用计算机多核资源
      【2】 进程是计算机分配资源的最小单位
      【3】 进程之间运行互不影响,各自独立
      【4】 每个进程空间独立,各有使用各自空间内容

面试要求: 1. 什么是进程,进程有什么特点
2. 进程有哪些状态,状态之间如何转换

七. 基于fork的多进程编程

import os

pid = os.fork()
功能 : 创建新的进程
返回值: 整数,如果创建进程失败返回一个负数,如果成功则原有进程返回新进程的PID号,新进程得到0

作业 : 1. 对要求问题进行总结回答。
2. 整理IO多路复用方法,要求能写出select
3. 复习类的使用(init super 继承,属性特殊)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值