3. 技术基础:操作系统与网络:进程线程模型、IO多路复用、TCP/UDP与性能调优
本章聚焦交易系统平台对操作系统的核心要求:进程/线程模型影响并发性能,IO多路复用是处理海量连接的关键,TCP/UDP调优直接影响交易延迟。以下结构化内容帮助快速建立回答框架。
先画框架:IO多路复用面试回答逻辑图——先定义、再对比三种模型、最后落地调优。
面试问答卡片
Q1:请解释进程与线程的区别,在交易系统中如何选择?
考察点:对操作系统并发模型的理解,以及结合实际场景的权衡能力。
回答框架:
- 定义区别(资源开销、通信方式、调度粒度)
- 优缺点对比(进程隔离性高但上下文切换重,线程轻量但需同步)
- 交易系统选择:高可用优先多进程隔离(如报价服务),高并发I/O密集优先多线程(如订单匹配)
示例回答:进程拥有独立内存空间,线程共享内存。交易系统中,风险控制模块常用多进程防止单点故障影响全局;而订单处理引擎采用多线程+无锁队列,减少切换成本,实现微秒级匹配。
可能追问:多线程如何避免数据竞争?你用过哪些同步机制?
避坑提醒:勿死记硬背八股,要结合具体业务举例,比如报价推送与撮合引擎的不同选择。
Q2:IO多路复用的实现原理?select、poll、epoll有什么区别?
考察点:底层系统调用理解,以及对高并发场景的适配能力。
回答框架:
- 核心思想:通过一个线程监听多个文件描述符就绪状态
- 三模型对比表
- 交易系统中通常使用epoll(ET模式)处理大量TCP连接
| 特性 | select | poll | epoll |
|---|---|---|---|
| 最大连接数 | 1024 | 无上限 | 无上限 |
| 触发方式 | 水平触发 | 水平触发 | 水平/边缘触发 |
| 效率 | O(n)遍历 | O(n)遍历 | O(1)回调 |
示例回答:select使用固定大小fd_set,poll改用链表,epoll通过红黑树+就绪链表,仅返回活跃连接。交易系统常用epoll ET模式,减少不必要系统调用,提升吞吐。
可能追问:边缘触发模式下如何保证数据全部读取?你遇到过哪些坑?
避坑提醒:不要只说理论,要提实际踩坑,如epoll惊群问题、LT/ET选择。
Q3:TCP与UDP在金融交易场景下的选型及调优?
考察点:网络协议理解与实际调优经验,特别是低延迟场景。
回答框架:
- TCP可靠但存在队头阻塞(HoL)和重传延迟;UDP不可靠但延迟可控
- 交易系统混合使用:行情推送用UDP+应用层FEC,订单/成交用TCP
- 调优要点:TCP_NODELAY、SO_REUSEPORT、调整接收/发送缓冲区、使用内核旁路(DPDK)
示例回答:行情网关采用UDP组播+前向纠错,降低行情传递延迟至10微秒;订单网关使用TCP,开启Nagle算法禁用和快速重传,配合内核参数tcp_fastopen减少握手开销。
可能追问:如何防止UDP丢包导致行情不一致?TCP的Nagle算法具体怎么影响延迟?
避坑提醒:不要否定UDP,金融场景靠应用层保证可靠性,而非协议层。
项目案例模板:交易系统核心引擎网络模块优化
| 项目名称 | 低延迟交易网关网络层重构 |
| 业务背景 | 原网关基于select模型,行情接入5000+连接后CPU飙升,延迟从50μs升至200μs,无法满足交易所升级要求。 |
| 规模指标 | 连接数:8000+ TCP连接 + 2000+ UDP组播流;日处理行情消息30亿笔;订单延迟要求P99 < 100μs。 |
| 技术栈 | C++14、epoll(ET模式)、SO_REUSEPORT、零拷贝(splice)、内存池、DPDK(后续版本) |
| 核心难点 |
|
| 面试高频追问 |
|
| 可迁移话术 | “我主导了网关网络模型从select迁移到epoll(ET),并配合SO_REUSEPORT实现多核亲和性,将P99延迟从200μs降到45μs。核心思路是减少不必要的系统调用、避免锁竞争,具体落地时通过压测发现边缘触发下的读写循环bug,最终采用‘一次读满+剩余事件注册’模式修复。” |
复习提示:本章要点可归纳为“模型对比(进程/线程、select/poll/epoll、TCP/UDP)”和“调优手段(内核参数、零拷贝、多核绑定)”。面试时先亮框架再举项目细节,能显著提升通过率。