历史地位:跨平台不如select,性能不如epoll,比较尴尬的地位
int poll(struct pollfd *fds,nfds_t nfds,int timeout);
struct pollfd{
int fd;//要监控的文件描述符
stort event;//关心文件描述符产生的事件:PLOOIN:可读事件,POLLOUT:可写事件;监控多个事件时,用按位或的方式
stort revent;//文件描述符真实产生的事件
}
struct pollfd arr;
arr.fd=0;
arr.event=POLLIN;
1.提出了事件结构的方式,在给poll函数传递参数的时候,不需要分别添加到“事件集合”当中
2.事件结构数组的大小可以更新程序员自己进行定义,并没有要求上限
3.不用在监控就绪之后,重新添加文件描述符
1.不支持跨平台
2.内核也是对事件结构数组监控的时候采用轮询遍历的方式
历史地位:迄今为止,linux平台性能最好的IO多路转接模型,没有之一
int epoll_create(int size);
size:目前没有含义,但是要大于0,兼容旧内核
int epoll_ctl(int epfd,int op,int fd,struct epoll_event *event);
struct epoll_event{
unit32_t event;
EPOLLIN:可读事件
EPOLLOUT:可写事件
epoll_data_t data;
}
int epoll_wait(int epfd,struct epoll_event *event,int maxevent,int timeout);
epoll_creat创建的数据结构中用红黑树来监控文件描述符,查询效率lgn,就绪后放入双向链表当中
epoll_wait每次从双向链表中获取就绪的事件结构