核心解答

select 的有序性由其底层 位图(Bitmap) 结构决定:

  1. 物理映射fd_set 是位图,FD 数值直接作为位偏移量(索引)。索引在内存中天然递增,导致集合表现为有序。
  2. 内核扫描:内核按位顺序(0 到 nfds-1)线性遍历。有序性简化了内核逻辑,并允许使用 CPU 位扫描指令(如 BSF)进行硬件加速。
  3. 确定性:有序遍历确保了多个 FD 同时就绪时,处理顺序是确定的(通常从小到大)。

深度解析

面试要点
  • 对比 pollpoll 使用结构体数组,虽也是顺序遍历,但 FD 数值本身可以离散。
  • 对比 epollepoll 放弃了有序扫描,改用就绪链表,只处理活跃 FD