综述:
三者的返回值都是就绪的文件描述符的数量
返回0表示没有事件发生。
每次调用select前都需要重置fd集合。
poll会修改pollfd结构体的revents参数,所以不用重置pollfd事件集。
由于每次select和poll调用都返回整个用户注册的事件集合(包括就绪+未就绪)
所以时间复杂度O(N).
epoll每次都直接从内核事件表中取得用户注册的事件,无须反复从用户空间读入这些事件。
时间复杂度O(1).
poll和epoll_wait分别用nfds和maxevents来指定最多监听多少个文件描述符和事件。
这两个数值都可以达到系统最大值,65535 cat/proc/sys/fs/file-max
select和poll只能工作在相对低效的LT模式,而epoll可以工作在ET模式。并且后者还支持EPOLLONESHOT事件。
select和poll采取轮询的工作方式,epoll采用回调方式,适用于连接数量多,但是活动连接比较少的情况。
~~~~~~~~~~~~~~~~
来源:oschina
链接:https://my.oschina.net/u/1382024/blog/194934