多路复用select poll epoll

I/O 多路复用之select、poll、epoll详解

  • select,poll,epoll都是IO多路复用的机制。I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。
  • 但实际中,异步IO实施起来很复杂,内核支持也不是很好;因此大家说的异步IO基本上是指IO多路复用。
  • 参考文档

Python select

  • Python的select()方法直接调用操作系统的IO接口,它监控sockets,open files, and pipes(所有带fileno()方法的文件句柄)何时变成readable 和writeable, 或者通信错误,select()使得同时监控多个连接变的简单,并且这比写一个长循环来等待和监控多客户端连接要高效,因为select直接通过操作系统提供的C的网络接口进行操作,而不是通过Python的解释器。

使用select实现一个并发socket server

  • 必须使socket处于非阻塞模式
socket.setblocking(True)

原文地址:https://www.cnblogs.com/limich/p/7477128.html