核心解答
select 的有序性由其底层 位图(Bitmap) 结构决定:
- 物理映射:
fd_set是位图,FD 数值直接作为位偏移量(索引)。索引在内存中天然递增,导致集合表现为有序。 - 内核扫描:内核按位顺序(0 到 nfds-1)线性遍历。有序性简化了内核逻辑,并允许使用 CPU 位扫描指令(如
BSF)进行硬件加速。 - 确定性:有序遍历确保了多个 FD 同时就绪时,处理顺序是确定的(通常从小到大)。
深度解析
性能代价由于是有序位图,即使只监听 FD 1000,内核也必须从 0 开始扫描。这种 O(n) 的线性开销 是
select被epoll取代的核心原因。
面试要点