3. 技术基础:操作系统与网络:进程线程模型、IO多路复用、TCP/UDP与性能调优

本章聚焦交易系统平台对操作系统的核心要求:进程/线程模型影响并发性能,IO多路复用是处理海量连接的关键,TCP/UDP调优直接影响交易延迟。以下结构化内容帮助快速建立回答框架。

先画框架:IO多路复用面试回答逻辑图——先定义、再对比三种模型、最后落地调优。
IO多路复用回答框架 ① 核心定义 单线程同时监听多连接 ② 三种模型对比 select/poll/epoll差异 ③ 适用场景 高并发、长连接、gateway ④ 性能优化 减少拷贝、调整事件阈值

面试问答卡片

Q1:请解释进程与线程的区别,在交易系统中如何选择?

考察点:对操作系统并发模型的理解,以及结合实际场景的权衡能力。

回答框架:

  1. 定义区别(资源开销、通信方式、调度粒度)
  2. 优缺点对比(进程隔离性高但上下文切换重,线程轻量但需同步)
  3. 交易系统选择:高可用优先多进程隔离(如报价服务),高并发I/O密集优先多线程(如订单匹配)

示例回答:进程拥有独立内存空间,线程共享内存。交易系统中,风险控制模块常用多进程防止单点故障影响全局;而订单处理引擎采用多线程+无锁队列,减少切换成本,实现微秒级匹配。

可能追问:多线程如何避免数据竞争?你用过哪些同步机制?

避坑提醒:勿死记硬背八股,要结合具体业务举例,比如报价推送与撮合引擎的不同选择。

Q2:IO多路复用的实现原理?select、poll、epoll有什么区别?

考察点:底层系统调用理解,以及对高并发场景的适配能力。

回答框架:

  1. 核心思想:通过一个线程监听多个文件描述符就绪状态
  2. 三模型对比表
  3. 交易系统中通常使用epoll(ET模式)处理大量TCP连接
特性selectpollepoll
最大连接数1024无上限无上限
触发方式水平触发水平触发水平/边缘触发
效率O(n)遍历O(n)遍历O(1)回调

示例回答:select使用固定大小fd_set,poll改用链表,epoll通过红黑树+就绪链表,仅返回活跃连接。交易系统常用epoll ET模式,减少不必要系统调用,提升吞吐。

可能追问:边缘触发模式下如何保证数据全部读取?你遇到过哪些坑?

避坑提醒:不要只说理论,要提实际踩坑,如epoll惊群问题、LT/ET选择。

Q3:TCP与UDP在金融交易场景下的选型及调优?

考察点:网络协议理解与实际调优经验,特别是低延迟场景。

回答框架:

  1. TCP可靠但存在队头阻塞(HoL)和重传延迟;UDP不可靠但延迟可控
  2. 交易系统混合使用:行情推送用UDP+应用层FEC,订单/成交用TCP
  3. 调优要点: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(后续版本)
核心难点
  • epoll边缘触发下,需循环读写避免漏数据;与业务线程交互使用无锁SPSC队列
  • 多核扩展性:每个CPU绑一个Reactor,利用SO_REUSEPORT分散连接
  • UDP组播多流并行接收,需调整sndbuf/rcvbuf至8MB,避免丢包
面试高频追问
  • 为什么会选择ET而不是LT?实际测试中ET比LT场景下事件数减少30%,但也容易漏事件,如何解决?
  • SO_REUSEPORT如何保证连接平均分布?是否出现过惊群?如何用EPOLL_EXCLUSIVE缓解?
  • 内存池如何与零拷贝配合?splice使用场景与限制?
可迁移话术“我主导了网关网络模型从select迁移到epoll(ET),并配合SO_REUSEPORT实现多核亲和性,将P99延迟从200μs降到45μs。核心思路是减少不必要的系统调用、避免锁竞争,具体落地时通过压测发现边缘触发下的读写循环bug,最终采用‘一次读满+剩余事件注册’模式修复。”
复习提示:本章要点可归纳为“模型对比(进程/线程、select/poll/epoll、TCP/UDP)”和“调优手段(内核参数、零拷贝、多核绑定)”。面试时先亮框架再举项目细节,能显著提升通过率。