在《Linux高性能服务器编程》一书上对I/O复用是这么解释的:
I/O复用使得程序能够同时监听多个文件描述符
简单理解来说就是:一个进程或者一个线程能够同时对多个文件描述符提供服务,服务器上的进程或者线程 ,如何将多个文件描述符统一监听,当任意一个文件描述符上由事件发生,都能够及时处理。Linux上的I/O复用系统调用API有三个select / poll / epoll 先来说一下select:
select:在一段时间内,监听用户感兴趣的可读可写和异常事件
事件类型只有三类:读、写、异常 ,启动监听,本身会阻塞,每次select调用之前都需要重新设置,所以用户程序必须保存所有现在还用的文件描述符,select每次都会将所有的文件描述符返回,select返回以后,必须探测哪些是就绪的文件描述符。下面是select函数原型:
int select(int nfds,fd_set * readfds,fd_set * writefds,fd_set * excefds,struct timeval * timeout);
nfds