day34-2 多路复用之epoll
epoll select存在的问题 select,需要遍历socket列表,频繁的对等待队列进行添加移除操作 数据到达后还需要遍历所有的socket才能获知哪些socket有数据 两个操作消耗的时间随着要监控的socket的数量增加而大大增加,所以最大只能监视1024个socket。 于是就推出了epoll,epoll对问题一方案是把等待队列的维护与阻塞进程这两个操作分开了 对问题2是自己维护了一个等待队列,避免了遍历所有的socket。需要注意:epoll仅能在linux中使用 epoll相关函数 import select # 导入select模块 epoll = select.epoll() # 创建一个epoll对象 epoll.register(文件句柄,事件类型) # 注册要监视的文件句柄和事件 # 事件类型: select.EPOLLIN # 可读事件 select.EPOLLOUT # 可写事件 select.EPOLLERR # 错误事件 select.EPOLLHUP # 客户端断开事件 epoll.unregister(文件句柄) # 销毁文件句柄 epoll.poll(timeout) # 当文件句柄发生变化,则会以列表的形式主动报告给用户进程,timeout为超时时间,默认为-1,即一直等待直到文件句柄发生变化,如果指定为1