面试题答案
一键面试- 连接数限制:
- select:它所能处理的文件描述符数量有限,一般受限于
FD_SETSIZE
,通常为1024,这在高并发场景下远远不够。 - poll:理论上没有连接数限制,但由于其采用链表存储文件描述符集合,在实际应用中,随着连接数增加,性能会显著下降。
- epoll:能轻松处理大量连接,它通过内核中的红黑树来管理文件描述符,理论上支持的连接数仅受限于系统资源。
- select:它所能处理的文件描述符数量有限,一般受限于
- 事件处理方式:
- select:采用轮询方式遍历所有注册的文件描述符,检查是否有事件发生。当连接数较多时,轮询的开销会非常大,性能会急剧下降。
- poll:同样采用轮询方式,与select类似,对所有文件描述符进行轮询检查事件,在高并发下效率较低。
- epoll:采用回调机制,当有事件发生时,内核会将发生事件的文件描述符放入一个就绪列表中,应用程序只需处理这个就绪列表中的文件描述符,大大减少了无效的轮询操作,在高并发场景下性能更高。
- 数据拷贝:
- select:每次调用
select
时,都需要将用户空间的文件描述符集合拷贝到内核空间,返回时又要将内核空间的结果拷贝回用户空间,数据拷贝开销较大。 - poll:与select类似,每次调用
poll
也需要在用户空间和内核空间之间进行数据拷贝,在高并发时开销明显。 - epoll:通过
epoll_ctl
函数将文件描述符注册到内核空间后,后续只有在有事件发生时,才将就绪的文件描述符从内核空间拷贝到用户空间,减少了数据拷贝次数,提高了效率。
- select:每次调用