面试题答案
一键面试select优势
- 跨平台性好:几乎所有主流操作系统都支持select,对于需要跨多种操作系统的应用,无需为不同系统适配不同的I/O多路复用机制。
- 简单易用:编程模型简单,调用接口简洁,对于开发规模较小、对性能要求不是极高的项目,快速开发可优先考虑。
select劣势
- 连接数限制:通常受限于FD_SETSIZE,一般为1024,在高并发长连接场景下难以满足大量连接需求。
- 性能问题:采用轮询方式检查文件描述符状态,随着连接数增加,轮询开销剧增,在高并发场景下性能急剧下降。
- 数据拷贝开销:每次调用select都需要将用户态的fd集合拷贝到内核态,增加额外开销。
选择select的场景及理由、设计思路
- 场景:在大型分布式系统中,如果部分模块并发量较低,且对跨平台性有强需求,或者开发资源有限,开发周期紧张。
- 理由:
- 利用select良好的跨平台性,保证系统在不同操作系统环境下稳定运行。
- 对于低并发场景,select性能瓶颈不明显,简单易用的特性可加快开发速度,降低开发成本。
- 设计思路:
- 连接管理:建立连接池,根据预估的低并发量合理设置连接池大小,避免资源浪费。
- 性能优化:虽然select本身性能有限,但可通过优化业务逻辑,减少每次轮询时不必要的操作,提高整体效率。例如,对频繁读写的连接优先处理,减少轮询时间。
- 错误处理:设计完善的错误处理机制,在select调用失败或文件描述符出现异常时,能及时进行重连或其他相应处理,保证系统稳定性。