zoukankan      html  css  js  c++  java
  • IO多路复用

    IO多路复用 -利用内置模块select[Windows Linux]

    • 循环每一个被监听的项目,看看是否有读写错误操作

    • 所以随着监听项目的增多,效率将变差

    • 服务器端

    • select必须传入三个参数分别是三个列表read_list, write_list, erro_list返回值是一个元祖对应传入的参数

        #select帮助感知某个IO操作是否有变动
        #read开始被read
        #write开始被write
        #erro开始有erro
        #一但感知到就会返回响应的参数
        
        
        import socket
        from select import select
        
        sk = socket.socket()
        address = ('127.0.0.1', 8080)
        sk.bind(address)
        sk.setblocking(False)
        sk.listen() #监听
        
        read_ls = [sk]	#将sk对象加入一个列表
        
        while 1:
            r_ls, w_ls, x_ls = select(read_ls, [], [])
            for i in r_ls:
                if i is sk:
                    conn, addr = i.accept()
                    read_ls.append(conn)
                else:
                    ret = i.recv(1024)	#接收消息
                    if ret == b'':
                        read_ls.remove(i)
                        i.close()
                        continue
                    print(ret)
                    i.send(b'byebye!')	#发送消息
      
    • 客户端 -起多线程的客户端

        import socket
        from threading import Thread
        
        def func():
            sk = socket.socket()
            address = ('127.0.0.1', 8080)
            sk.connect(address)
            sk.send(b'hello')
            ret = sk.recv(1024)
            print(ret)
            sk.close()
        
        t_ls = []
        for i in range(10):
            t = Thread(target=func)
            t.start()    
      

    其他类似的模块

    poll -[Linux]

    • select机制基本上一样
    • 但是poll监听的对象比select监听上限多

    epol -[Linux][Windows上没有 ]

    • 高端的
    • 并不是循环每一个项目进行监听
    • 而是为每一个项目增加回调函数
    • 有信号来直接进行回调函数,所以效率比循环高
  • 相关阅读:
    yield return 和 Func
    匿名类型与扩展方法
    对象初始化器和集合初始化器
    VSCode编辑器使用技巧:快捷输入HTML代码
    CSS清除浮动
    置换元素与非置换元素
    浏览器五大内核及代表
    IE过滤器
    写个 Hello world 前端从入坑到弃坑系列教程(1)
    测试一下
  • 原文地址:https://www.cnblogs.com/liliudong/p/9746912.html
Copyright © 2011-2022 走看看