- I/O 多路复用
- 信号驱动I/O
- Linux专有epoll
I/O多路复用
通过select系统调用或者poll系统调用,来对文件描述符进行检查。
- select函数
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds, struct timeval *timeout);
参数分别的意思是:需要测试的fd范围0~fd-1,满足三种情况要求的文件描述符号,超时时间。 - poll函数
int poll(struct pollfd fds[], nfds_t nfds, int timeout);
参数分别是:元素包含文件描述符、需要检查的状态、返回的状态的一个数组,数组长度以及超时时间。
二者的区别在于poll里面传进去的数组大小不受fd_set定义的大小限制。poll的events和revents更丰富一些。select用的更为广泛一些。新版中select的性能经过优化与poll差不多。
- epoll函数
epoll函数包括三个API:epoll_create()、epoll_ctl()、epoll_wait()三个调用。
epoll是三个调用中性能最好,效果最多的。但是只有Linux才可以使用。
主要是因为服务器上面会连接多个socket链接,如果为每一个套接字建立一个线程的话,会比较占用资源,所以需要使用epoll来优化性能。