IO复用

高性能编程之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采用回调方式,适用于连接数量多,但是活动连接比较少的情况。 ~~~~~~~~~~~~~~~~ 来源: oschina 链接: https://my.oschina.net/u/1382024/blog/194934