美文网首页
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