select 是 UNIX/Linux 系统中最早出现的 I/O 多路复用机制,它允许程序监视多个文件描述符,等待一个或多个文件描述符变为"就绪"状态(可读、可写或出现异常)。
多路复用:select 可以同时监视多个文件描述符,而不需要为每个描述符创建单独的线程或进程。
阻塞与非阻塞:select 可以工作在阻塞模式(等待至少一个文件描述符就绪)或非阻塞模式(立即返回检查状态)。
文件描述符集合:select 使用三个独立的文件描述符集合:
由于 select 的局限性,现代系统通常使用更高效的替代方案: - poll:解决了文件描述符数量限制 - epoll(Linux):更高效的大规模I/O多路复用 - kqueue(BSD系统) - IOCP(Windows)
select 虽然效率不高,但在需要跨平台兼容性或处理少量文件描述符时仍然有用。