zoukankan      html  css  js  c++  java
  • 关于python IO模型的笔记

    IO模型共有4种,其中三种是同步IO和剩下一个异步IO

    常用的三种同步IO是

    1 阻塞IO:特点:全程阻塞

    由于用户态转内核态,向系统发起数据请求,系统处于等待数据状态(阻塞)当数据来了将数据从内核态拷贝到用户态

    常见的阻塞IO是socket的recv请求数据状态,和accept等待链接状态中的暂停状态。

    2 非阻塞IO:

    其实所谓的非阻塞IO就是把系统等待数据状态变得不再阻塞,而是当你需要数据的时候时不时隔段时间来看看有没有数据,没有则返回error,在socket中就是把系统等待连接的状态改成非阻塞IO时不时查看有没有用户连接

    列:

    import socket
    sock=socket.socket()
    sock.bind((ip)poit)
    sock.listen(5)
    sock.setblicking(False)
    while 1:
     try:
      conn,addr=sock.accept()
     except Exception as e:
      print(e)
      time.sleep(3)

    系统会重复确定连接状态,没有连接的时候抛出异常

    缺点:
    1.发送多次系统调用,消耗大
    2.数据不是实时的

    优点:wait for data的时候无需等待


    两个阶段:wait for data 非阻塞
       copy data  阻塞

    3 IO多路复用 特点:可以监听多个连接

    这个比较重要一般面试的时候一定会问

    在socket中如何实现多个用户同时连接,除了socketserver模块外,还可以自己用IO多路复用实现

    用select模块来对socket对象进行监听结合setbloking实现同时链接多个客户端

    import select
    import socket
    
    server=socket.socket()
    server.bind(('127.0.0.1',8080))
    server.listen(5)
    server.setblocking(False)#重复查看客户端有没有连接进入
    imports=[server,] #将对象加入列表
    while 1:
        r,w,e=select.select(imports,[],[])#select监听列表对象,列表中有活动的对象时候会赋值给r
        print('sever is wroking')
        for obj in r:
            if obj==server:   #如果是socket对象有活动
                conn,addr=obj.accept()#创建客户端连接对象
                imports.append(conn) #将创建号的客户端对象加入列表进行监听是否再次活动
            else:#如果是连接对象有活动
                data=obj.recv(1024)
                print(data.decode('utf8'))
                send_data=input('>>')
                obj.send(send_data.encode('utf8'))

    特点: 1 全程(wait for data,copy)
      2 能监听多个文件描述符(soket对象)

    4 异步IO:

    因为实现过于复杂繁琐,所以我也不知道,待补充

    5 驱动信号模型

    待补充。。。

  • 相关阅读:
    各类Http请求状态(status)及其含义 速查列表 xmlhttp status
    Microsoft Visual Studio 2010 正式版下载[含旗舰版序列号](中、英文版)
    【分享】开源或免费的ASP.NET web应用列表
    线程间操作无效: 从不是创建控件“Control Name'”的线程访问它问题的解决方案及原理分析
    Asp.Net中多语言的实现
    Oracle 数字与空值的排序问题
    新版微软一站式示例代码库 6月2日更新下载。
    .NET反射机制简介
    Decimal与double类型误差
    用动态菜单增强.NET应用程序
  • 原文地址:https://www.cnblogs.com/crischou/p/6836687.html
Copyright © 2011-2022 走看看