面试题答案
一键面试优势
- 没有最大文件描述符限制:
select
受限于FD_SETSIZE
(通常为1024),而poll
使用pollfd
结构体数组,理论上没有这个限制,更适合处理大量文件描述符的场景。例如在高并发的服务器中,可能同时有数千个客户端连接,poll
能更好地应对。 - 数据结构效率更高:
select
每次调用都要重置fd_set
,而poll
使用pollfd
结构体数组,每次调用只需修改事件,减少了数据拷贝和初始化开销。在频繁进行I/O事件检查的场景下,poll
性能更好。
劣势
- 内存开销:
poll
需要分配一个pollfd
结构体数组,在文件描述符数量较多时,内存开销比select
大。例如在文件描述符数量很少的情况下,这种内存开销可能就显得不划算。 - 遍历开销:
poll
和select
一样,都需要遍历文件描述符集合来检查事件,在文件描述符非常多且活跃事件很少时,效率不高。
适用场景
- 高并发且文件描述符数量较多:如大型网络服务器,有大量客户端连接。
poll
没有文件描述符数量限制且数据结构操作更高效,能更好处理这种情况。 - 频繁I/O事件检查:对于需要频繁轮询检查I/O事件的应用,
poll
因无需每次重置描述符集合,性能更优。