美文网首页
Linux中的epoll

Linux中的epoll

作者: Wi1ls努力努力再努力 | 来源:发表于2020-10-22 21:07 被阅读0次

第一次认识epoll机制是在Android中的Handler中的Looper的唤醒和休眠机制,后者是利用Linux提供的epoll完成的。
epoll是Linux独有的机制,属于高并发下的事件驱动,是对于select和poll的性能提升。

//头文件
#include <sys/epoll>

//api
//表示创建一个epoll句柄
int epoll_create(int _size)
//对上述创建的epoll句柄进行操作
int epoll_ctl(int __epoll_fd, int __op, int __fd, struct epoll_event* __event);
//等待处于epoll上被监听的fd产生对应的事件
int epoll_wait(int __epoll_fd, struct epoll_event* __events, int __event_count, int __timeout_ms);
  • epoll_ctl
    • __epoll_fd:epoll句柄,可以认为被监听的fd是挂在这个句柄上的
    • __op:本次的操作
      • EPOLL_CTL_ADD:向epoll句柄注册一个fd
      • EPOLL_CTL_MOD:向epoll句柄修改一个已经注册的fd
      • EPOLL_CTL_DEL:删除一个已经注册在epoll句柄中的fd
    • __fd:被监听的文件描述符
    • __event:被监听的事件
      • EPOLLIN:表示被监听的fd有可以读的数据
      • EPOLLOUT:表示被监听的fd有可以写的数据
      • EPOLLPRI:表示有可读的紧急数据
      • EPOLLERR:对应的fd发生异常
      • EPOLLHUP:对应的fd被挂断
      • EPOLLET:设置EPOLL为边缘触发
      • EPOLLONESHOT:只监听一次

//以下是linux-4.12下的源码

//./include/uapi/linux/eventpoll.h
struct epoll_event {
  __u32 events;
  __u64 data;
} EPOLL_PACKED
  • epoll_wait
    • __epoll_fd:epoll句柄
    • epoll_event:回传处理事件的数组
    • __event_count:每次能处理的事件数
    • __timeout_ms:等待IO,-1表示一直阻塞直到来IO被唤醒,大于0表示阻塞指定的时间后被唤醒。

相关文章

网友评论

      本文标题:Linux中的epoll

      本文链接:https://www.haomeiwen.com/subject/lxoqjktx.html