面试题答案
一键面试- 文件描述符数量限制:
- select:在传统实现中,
select
对文件描述符数量有限制,通常受限于FD_SETSIZE
,一般为1024。虽然在一些现代系统中可以通过修改内核参数等方式扩大,但这种方式并不通用。 - poll:
poll
理论上对文件描述符数量没有限制,它基于链表结构管理文件描述符,所以其可处理的文件描述符数量仅受限于系统资源(如内存等)。
- select:在传统实现中,
- 数据结构使用:
- select:使用
fd_set
数据结构,它本质上是一个位图,通过设置不同的位来表示文件描述符的状态。在每次调用select
时,需要将所有关注的文件描述符集合(读、写、异常)拷贝到内核空间,返回后又要从内核空间拷贝回用户空间,这种操作在文件描述符较多时开销较大。 - poll:使用
pollfd
结构体数组,每个pollfd
结构体包含文件描述符、事件掩码和返回的事件掩码。poll
将结构体数组传递给内核,内核修改其中的返回事件掩码,无需像select
那样来回拷贝整个文件描述符集合,减少了数据拷贝开销。
- select:使用