zoukankan      html  css  js  c++  java
  • select

    触发方式

    1.水平触发    

    2.边缘触发

    3.IO多路复用的优势:同时可以监听多个连接

    边缘触发案例:

     1 import socket,select
     2 
     3 tcp_server = socket.socket()
     4 tcp_server.bind(('127.0.0.1',8080))
     5 tcp_server.listen(25)
     6 inp = [tcp_server,]
     7 while True:
     8     r,w,p = select.select([tcp_server,],[],[],1)
     9     for i in r:
    10         # conn,addr = i.accept()
    11         # data = conn.recv(1024)
    12         # print(data.decode())
    13         print('hello')
    14         # inp.append(conn)
    15     print('.................')
     1 tcp_server = socket.socket()
     2 tcp_server.bind(('127.0.0.1',8080))
     3 tcp_server.listen(5)
     4 inp = [tcp_server,]
     5 while True:
     6     r,w,p = select.select(inp,[],[],5)
     7     for i in r:
     8         if i == tcp_server:
     9             conn,addr = i.accept()
    10             print(conn)
    11             inp.append(conn)
    12         else:
    13             data = i.recv(1024)
    14             print(data.decode())
    15             a = input('给%s返回的信息:'%inp.index(i))
    16             i.sendall(a.encode())
    17     print('goiing......')

    改进版

     1 import socket,select,threading
     2 
     3 tcp_server = socket.socket()
     4 tcp_server.bind(('127.0.0.1',8080))
     5 tcp_server.listen(5)
     6 inp = [tcp_server,]
     7 def send(i):
     8     data = i.recv(1024)
     9     print(data.decode())
    10     a = input('给%s返回的信息:' % inp.index(i))
    11     i.sendall(a.encode())
    12 
    13 while True:
    14     r,w,p = select.select(inp,[],[],5)
    15     for i in r:
    16         if i == tcp_server:
    17             conn,addr = i.accept()
    18             print(conn)
    19             inp.append(conn)
    20         else:
    21             t = threading.Thread(target=send,args=(i,))
    22             t.start()
    23     print('goiing......')

    select   就相当于一个班级,40个人同时工作,当有一个人工作完了提交,就拍一下桌子,那么老师就知道有人写完了,但是不知道是哪一个,就得一个一个的去问。

    epoll 就相当于自报家门然后提交。

  • 相关阅读:
    Dumps for Dummies Dump Analysis Tutorial
    WCF 学习资料
    winform 跨线程设置或读取控件的属性
    反射通过属性名得到属性的值
    C# 不用循环填充数组
    反射字符串调用方法
    使用反射打开窗体,并控制一个窗体只能打开一个
    绘制圆角窗体和圆角panel
    WinForm使用反射通过控件的name得到该控件
    winfrom 绘制圆形按钮
  • 原文地址:https://www.cnblogs.com/ch2020/p/12805806.html
Copyright © 2011-2022 走看看