各种IO面试

用epoll 写一个server

2018-12-10  本文已影响103人  ld9183

1. 首先熟悉下epoll的三个接口

2. 如何使用这三个接口写一个server

           typedef union epoll_data {
               void    *ptr;
               int      fd; //可以用fd, 也可以用ptr来保存事件对应的文件句柄
               uint32_t u32;
               uint64_t u64;
           } epoll_data_t;

           struct epoll_event {
               uint32_t     events;    /* Epoll events */
               epoll_data_t data;      /* User data variable */
           };

3. 为什么epoll可以支持百万级别的连接?

  1. 在server的处理过程中,大家可以看到其中重要的操作是,使用epoll_ctl修改clientfd在epoll中注册的epoll_event, 这个操作首先在红黑树中找到fd对应的epoll_event, 然后进行修改,红黑树是典型的二叉平衡树,其时间复杂度是log2(n), 1百万的文件句柄,只需要16次左右的查找,速度是非常快的,支持百万级别毫无压力
  2. 另外,epoll通过注册fd上的回调函数,回调函数监控到有事件发生,则准备好相关的数据放到到就绪链表里面去,这个动作非常快,成本也非常小

4. 未完,后续继续补充

上一篇下一篇

猜你喜欢

热点阅读