zoukankan      html  css  js  c++  java
  • epoll

    epoll

      epoll是一个比select模型更高效的异步模型,select一次查询需要O(N),epoll需要O(1),因为epoll可以直接获得结果,而select需要用所有当前的fd去readable fd set中检察。epoll很简单,推荐使用libevent,epoll只在linux下有效,libevent提供了统一的接口,内部使用各个平台独有的设施来完成功能。 

    int epoll_create(int size);
    
    int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
    
    EPOLL_CTL_ADD    //注册新的fd到epfd中;
    EPOLL_CTL_MOD    //修改已经注册的fd的监听事件;
    EPOLL_CTL_DEL    //从epfd中删除一个fd;
    
    typedef union epoll_data
    {
      void        *ptr;
      int          fd;
      __uint32_t   u32;
      __uint64_t   u64;
    } epoll_data_t;
    
    struct epoll_event {
    __uint32_t events; /* Epoll events */
    epoll_data_t data; /* User data variable */
    };
    
    EPOLLIN     //表示对应的文件描述符可以读(包括对端SOCKET正常关闭);
    EPOLLOUT    //表示对应的文件描述符可以写;
    EPOLLPRI    //表示对应的文件描述符有紧急的数据可读(这里应该表示有带外数据到来);
    EPOLLERR    //表示对应的文件描述符发生错误;
    EPOLLHUP    //表示对应的文件描述符被挂断;
    EPOLLET     //将EPOLL设为边缘触发(Edge Triggered)模式,这是相对于水平触发(Level Triggered)来说的。
    EPOLLONESHOT//只监听一次事件,当监听完这次事件之后,如果还需要继续监听这个socket的话,需要再次把这个socket加入到EPOLL队列里。
    
    int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);

      参考:http://www.cnblogs.com/haippy/archive/2012/01/09/2317269.html

  • 相关阅读:
    @SneakyThrows
    docker部署elasticsearch
    docker部署rabbitmq
    docker部署minio
    docker 部署 jenkins
    linux 根据文件名全局查找位置
    docker 容器与宿主机之间文件拷贝
    excel 查看当前单元格是否存在某一列
    机器学习sklearn
    一些博客链接
  • 原文地址:https://www.cnblogs.com/tekkaman/p/3388608.html
Copyright © 2011-2022 走看看