Linux系统调用epoll_ctl
(at fs/eventpoll.c
) 使用称为兴趣列表的红黑树来创建、删除或修改文件描述符事件的兴趣。兴趣清单没有被搜索到epoll_wait
,这更确切地说等待来自的回调poll
(在include/linux/poll.h
)。因此,epoll
就连接数而言,接收感兴趣的文件描述符事件的执行时间为 O(1)n。然而,由于使用了红黑树,向兴趣列表添加、修改或删除文件描述符的时间复杂度为 O(log(n))。
当哈希表可以为添加和删除连接以及使用连接提供 O(1) 性能时,为什么要使用红黑树来实现兴趣列表呢?有哪些权衡?