IO、NIO、多路复用select\poll\epoll底层原理

   最近偶尔会看到linux下IO多路复用的知识,就深入理解了一下,下面的文章讲的很清楚了,不再重复总结。

原文链接:https://segmentfault.com/a/1190000003063859

   这里额外说明下epoll的底层数据结构:

epoll_create方法会创建eventpoll结构体:

struct eventpoll{
    ....
    /*红黑树根节点,存储所有通过epoll_ctl添加到epoll中的事件*/
    struct rb_root  rbr;
    /*双链表中存放满足条件的事件,用户使用epoll_wait获取对应事件*/
    struct list_head rdlist;
    ....
};

红黑树可以高效识别出重复添加的事件,也就是说,使用epoll_ctl若重复添加同一个事件,这是会去重的,当事件就绪时,就绪链表中只会有一个就绪事件

你可能感兴趣的:(网络杂谈)