
1.select的缺点:
     1.select监听的文件描述符集合是一个数组,有上限(1024个)
     2.select监听的文件描述符集合在应用层,内核层监听事件后需要传递给用户层带来资源开销
     3.select需要用户手动查找产生事件的文件描述符
     4.select只能工作在水平触发模式(低速模式)而无法工作在边沿触发模式(高速模式)
2.poll 
    int poll(struct pollfd *fds, nfds_t nfds, int timeout);
     功能:
         监听文件描述符集合,工作方式类似于select 
     参数:
         fds:文件描述符集合首地址
         nfds:文件描述符集合的数组的长度 
         timeout:超时时间,单位毫秒,-1表示永久等待
     返回值:
         成功返回产生事件文件描述符个数 
         失败返回-1 
         超时仍然没有产生的事件返回0 
     
     struct pollfd {
         int   fd;         /* file descriptor */
         short events;     /* requested events */
         short revents;    /* returned events */
     };
    1.poll的缺点:
         1.poll监听的文件描述符集合在应用层,内核层监听事件后需要传递给用户层带来资源开销
         2.poll需要用户手动查找产生事件的文件描述符
         3.poll只能工作在水平触发模式(低速模式)而无法工作在边沿触发模式(高速模式)
3.epoll
     1.epoll_create
       int epoll_create(int size);
       功能:
         在内核层创建一张epoll监听的事件表
       参数:
         size:监听的事件表大小
       返回值: 
         成功返回新的文件描述符
         失败返回-1
    2.epoll_ctl 
       int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
       功能:
         管理内核中epoll事件表
       参数:
         epfd:文件描述符 
         op: EPOLL_CTL_ADD   添加客户端 
             EPOLL_CTL_MOD   修改客户端 
             EPOLL_CTL_DEL   删除客户端
         fd:文件描述符 
         event:事件结构体
       返回值:
         成功返回0 
         失败返回-1
    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 */
     };  
    events:EPOLLIN  EPOLLOUT  EPOLLET  
     
    3.epoll_wait    
       int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);
       功能:
         监听epfd对应的事件表中是否有事件发生 
       参数: 
         epfd:文件描述符 
         events:存放产生事件的数组空间首地址
         maxevents:最多存放数组元素个数 
         timeout:超时时间,单位毫秒,-1表示永久等待
       返回值:
         成功返回实际发生事件的个数
         失败返回-1 
         超时仍然没有产生事件返回0
    epoll的优点:
         1.epoll没有文件描述符上限限制 
         2.epoll监听的事件表在内核层,内核监听事件不需要操作用户层空间提高效率
         3.epoll会获得产生事件的文件描述符,不需要用户查找
         4.epoll可以工作在边沿触发模式(高速模式),提高效率










