高性能编程之IO复用之[select,poll,epoll]比较

喜欢而已 提交于 2019-12-01 17:03:28

综述:

三者的返回值都是就绪的文件描述符的数量

返回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采用回调方式,适用于连接数量多,但是活动连接比较少的情况。

~~~~~~~~~~~~~~~~

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!