除了select与epoll之外,poll也能够同时等待多个fd。它在Linux内核源码中的什么地方实现?它和select更相似还是和epoll更相似?为什么?
时间: 2023-06-19 22:10:02 浏览: 117
poll 在 Linux 内核源码中的实现在 `fs/select.c` 文件中。它和 select 更相似,因为它们都使用了传统的文件描述符集合来管理需要监听的文件描述符。但是它们之间的主要区别在于,poll 没有使用 select 中存在的文件描述符集合的限制,它使用一个可变长度的数组来存储需要监听的文件描述符。
相比之下,epoll 更加高效,因为它使用了内核事件表来管理需要监听的文件描述符,避免了每次调用时都需要将文件描述符集合从用户空间拷贝到内核空间的开销。此外,epoll 还支持边缘触发(Edge Triggered,ET)和水平触发(Level Triggered,LT)两种模式,更加灵活。
因此,虽然 poll 和 select 在某些场景下仍然有其优势,但是在大多数情况下,epoll 是更好的选择。
阅读全文