select、poll、epoll有什么区别?ET模式为什么要读到EAGAIN?-嵌入式Linux面试

浏览量:11
时间: 2026-11-06 09:54:00

FANYI / 嵌入式Linux / INTERVIEW 07

多个串口、网络Socket或文件描述符同时等待事件,面试官常会追问为什么不能简单地每个Socket开一个线程,select/poll/epoll各有什么适用场景。

面试先给结论

select和poll会把关注的描述符集合交给内核等待事件,返回后由程序检查;epoll通过注册兴趣事件并取回就绪事件减少大量无关描述符的重复扫描。ET边沿触发通常要用非阻塞I/O循环读写到EAGAIN,否则可能漏掉尚未处理完的数据。

Linux epoll系统调用与EPOLLIN/EPOLLOUT事件处理的实际内核流程技术图

01先区分系统调用机制

select使用fd_set位图,常见实现受到FD_SETSIZE等接口限制;poll使用pollfd数组,避免相同的固定fd_set位图上限;epoll在Linux内核维护兴趣列表并提供事件就绪接口。性能还受描述符数量、活动比例和唤醒模式影响。

02LT和ET的关键差别

LT(电平触发)只要条件仍满足就可再次通知;ET(边沿触发)通常在就绪状态发生变化时通知。ET配合非阻塞fd,收到可读事件后循环read/recv直到EAGAIN,可避免缓冲中还有未读数据却不再产生新通知。

03常见生产问题

忙循环高CPU可能来自没有正确处理EPOLLOUT、错误地反复注册、未清空缓冲或异常fd;低吞吐也可能是回调里做了大量阻塞操作。epoll不自动解决应用层协议分帧和线程安全问题。

04如何排查并选择

少量设备、简单功能使用select或poll完全可以;大量Socket或事件驱动服务器可考虑epoll。用strace、perf或统计日志查看epoll_wait唤醒次数、返回事件及单次处理耗时,结合真实负载选择。

面试中常见失分点

  • 认为epoll在任何描述符数量下必然比poll快。

  • ET模式下只读一次就返回,忽略仍未消费的内核接收缓冲区。

面试官可能继续追问

客户端Socket始终可写,为什么EPOLLOUT可能导致epoll_wait频繁返回?


声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。仅供学习交流使用,不构成商业目的。版权归原作者所有,如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时删除。侵权投诉
相关推荐HOT
电源工程师面试:同步Buck上下管为什么会直通?死区时间太大也不是好事

同步Buck把续流二极管换成MOSFET后效率更高,但也引入了上下管交越导通风险。面试官如果继续问死区时间,真正想听的是你是否理解驱动延迟、MOSFET关断过程... 详情>>

2026-10-17 15:35:42
EMC整改后噪声"搬"到别处怎么处理?整改闭环与回归验证怎么做?EMC工程师面试

一句话答案整改噪声搬家说明只改了局部没切断耦合路径,要先建立全频段噪声地图,用近场探头/频谱仪复测所有频段,按源头→路径→接收端系统改,改一项复测全频段并留档回... 详情>>

2026-09-13 21:25:45
在屏蔽室内测得很干净,出了屏蔽室就异常:EMC测试环境怎么影响判断?

一台采集设备在实验室调试良好,搬到电机旁边却频繁复位。工程师首先要问的不是“加多少磁珠”,而是两个现场的外部电磁环境、接线和接地路径究竟改变了什么。从图中的屏蔽... 详情>>

2026-10-25 11:05:38
RS-232接口电路怎么设计与防护?MAX3232、ESD与隔离怎么做?硬件工程师面试

一句话答案RS-232用MAX3232这类收发器把MCU的TTL电平转成±12V左右的双端电平,DB9口靠近处加TVS阵列和自恢复保险丝,长距离或强干扰场合加隔... 详情>>

2026-09-13 21:25:18
为什么离职、为什么选择这个岗位?怎样回答更有说服力?-电子工程师行为面试

ENGINEER INTERVIEW · 行为面试题 / 电子工程师求职面试常见问题:离职原因、岗位匹配、职业规划及真实工程经历的表达方法,避免抱怨或空泛回答。... 详情>>

2026-11-05 11:44:25
开班信息