poll 模型
- 工作原理
poll
模型的工作原理与 select
类似,都是通过一个函数来监视多个文件描述符的状态变化。poll
使用一个 pollfd
结构体数组来表示要监视的文件描述符及其关注的事件,它通过 poll
函数来等待这些文件描述符上的事件发生。 - 函数原型
#include <poll.h>
int poll(struct pollfd *fds, nfds_t nfds, int timeout);
fds
:指向一个 pollfd
结构体数组,每个 pollfd
结构体包含了要监视的文件描述符、关注的事件和返回的事件。nfds
:表示 fds
数组的元素个数。timeout
:指定 poll
函数的超时时间,单位为毫秒。若为 -1 则表示无限等待,直到有事件发生。- 优缺点
- 优点:相较于
select
,poll
没有文件描述符数量的限制,因为它使用链表来存储文件描述符,理论上可以监视任意数量的文件描述符。 - 缺点:和
select
一样,poll
也需要在每次调用时将文件描述符信息从用户空间复制到内核空间,并且在返回时将结果从内核空间复制回用户空间,存在一定的性能开销;同时,poll
返回后也需要遍历 pollfd
数组来确定哪些文件描述符发生了事件,随着文件描述符数量的增加,效率会降低