本轮聚焦 编程与开发(programming),但刻意绕开了已被反复咀嚼的"学一门新语言/换一个新框架"叙事。本期把镜头对准一个更硬核、也更稀缺的赛道——低延迟与性能工程(Low-Latency & Performance Engineering):当响应时间被压到纳秒(ns)与微秒(μs)级,写代码的逻辑要从"让功能跑通"彻底切换为"和 CPU 缓存、内存分配器、操作系统调度器抢时间"。
核心发现一:低延迟不是"优化",而是另一种工程范式。 高频交易(HFT)老兵 David Gross 直言,把低延迟归到"代码优化(code optimization)"伞下是个根本性误解——它不是事后调优,而是从架构第一天就渗透到每一行代码、每一次内存分配、每一个系统调用的设计哲学。
核心发现二:测量比手速更重要。 Chandler Carruth 的经典演讲揭示,大多数微基准测试(microbenchmark)都在"测谎"——编译器优化掉了你以为是热点的代码,而你浑然不觉。没有可信的测量,性能工程就是玄学。
核心发现三:内存是性能战场的主轴。 John Lakos 的 Arena 分配器、Linux 内核 SLAB/SLUB 的取舍,都指向同一个事实——谁掌控了内存分配的确定性与局部性,谁就掌控了延迟的下限。
下面七强,分别从测量层、内存层、并发层、架构层、应用层切入,拼出一张完整的低延迟工程地图。
| # | 视频/演讲 | 频道 | 核心主题 | 关键词 | 适用人群 |
|---|---|---|---|---|---|
| 1 | When Nanoseconds Matter: Ultrafast Trading | CppCon (~185万订阅) | HFT 架构,延迟≠优化 | 抢价、确定性、硬件共置 | 金融/量化、系统工程师 |
| 2 | Tuning C++: Benchmarks, CPUs, Compilers | CppCon | 微基准的谎言与测量纪律 | assembly 检视、google-benchmark | 所有性能敏感开发者 |
| 3 | Local (Arena) Memory Allocators | CppNow (~6.1万订阅) | 区域分配器与分配策略 | arena、确定性、生命周期 | C++/系统开发者 |
| 4 | Designing Low-Latency Systems with Rust | ScyllaDB TV | 用 Rust 设计低延迟系统 | 所有权、无 GC、panic 安全 | Rust 工程师、DB 内核 |
| 5 | Work Contracts: Lock-free Concurrency | CppCon | 无锁无等待并发框架 | wait-free、CAS、内存序 | 并发/实时系统 |
| 6 | Maximising Throughput, Minimising Latency | CppCon | 吞吐与延迟的权衡 | 数据结构、缓存友好 | 中间件/基础设施 |
| 7 | Why Rust for Better Low-latency Systems | RustLab/DB 工程师 | 数据库引擎选 Rust 的理由 | 工效学、维护性、零开销 | 数据库/平台工程 |
订阅数为检索时点的近似值,会议频道(CppCon/CppNow)持续增长。
视频:When Nanoseconds Matter: Ultrafast Trading Systems in C++ — David Gross(CppCon) 链接:https://www.youtube.com/watch?v=sX2nF1fW7kI
核心洞察:演讲者开篇即抛出反常识判断——"低延迟编程常被放在'代码优化'的伞下,但这是个误导。" 在 HFT 的世界里,你不是在"让程序更快",而是在和一个物理对手抢报价:从交易所撮合引擎发出数据包,到你的策略下单成交,整个回路(round-trip)通常被压缩到 个位数微秒。这迫使人重新理解"快":不是平均快,而是最坏情况(tail latency)也要快且稳定。
David 重点拆解了几个"被偷走的纳秒"来源:动态内存分配(malloc/free 的不确定延迟)、系统调用与上下文切换(一次 syscall 可能吃掉数千纳秒)、CPU 缓存未命中(一次 L3 miss ≈ 数十纳秒,主存 miss ≈ 百纳秒级)。HFT 的典型工程对策包括:热路径零分配(启动时预分配所有缓冲区)、CPU 亲和性与核心隔离(isolcpus、忙轮询代替睡眠)、内核旁路(DPDK/Solarflare 等绕过协议栈)、锁的彻底消除。
实用价值:即使你不做交易系统,这套"热路径必须确定"的思维同样适用于游戏引擎的 60/120 帧渲染、广告竞价、实时音视频抖动消除。适合人群:量化/金融工程师、实时系统开发者、对"为什么我的程序偶尔卡顿"有执念的后端工程师。
视频:Tuning C++: Benchmarks, and CPUs, and Compilers! Oh My! — Chandler Carruth(CppCon) 链接:https://www.youtube.com/watch?v=nXaxk27zwlk
核心洞察:Chandler Carruth(LLVM/Clang 核心开发者,Carbon 语言带头人)这场被誉为"性能工程必看"的演讲,其真正主题不是"如何优化",而是"如何不欺骗自己"。他用一连串反例证明:你写的微基准测试,很可能根本没在测你以为的东西——编译器可能把整个循环优化成空操作(dead code elimination),让看似变快的代码其实什么都没执行;CPU 的分支预测与缓存预取会让第一次测量毫无意义;时钟源本身的精度与开销也在污染结果。
他给出的方法论极其朴素却致命:永远去看生成的汇编(assembly),确认编译器真的执行了你写的逻辑;使用统计上稳健的基准框架(如他推动的 google/benchmark);理解现代 CPU 是深度流水线 + 乱序执行 + 分支预测的超标量机器,一个 if 的代价不是"判断",而是"预测失败时整条流水线被冲刷(pipeline flush)"。
实用价值:这是建立测量可信度(measurement credibility)的基石课。所有后续优化都建立在"我能相信我的数字"之上。适合人群:写过 gettimeofday 套两层循环就觉得测出性能的开发者——这场会刷新你的认知。
flowchart LR
A[写下基准测试] --> B{看汇编}
B -->|被优化掉| C[修改代码阻止优化]
B -->|真实执行| D[统计稳健采样]
D --> E{结果稳定?}
E -->|否, 噪声大| F[排查缓存/调度/时钟源]
E -->|是| G[建立测量可信度]
F --> D
G --> H[才有资格谈优化]
视频:Local ("Arena") Memory Allocators — John Lakos(CppNow) 链接:https://www.youtube.com/watch?v=CVbnjydW5M0
核心洞察:Bloomberg 的 John Lakos(《Large-Scale C++ Software Design》作者)在这场(及其 ACCU 版本 d1DpVR0tw0U)中反复强调一个工程事实:通用 malloc/free 是性能与确定性的最大敌人之一。它的碎片化、锁竞争、系统调用回退路径,让"分配"变成一个不可控的黑盒。Arena(区域)分配器的思想是——把内存分配从"全局共享服务"降级为"局部状态":在一个逻辑作用域(如一次请求、一帧渲染、一次查询)内,所有小对象都从一个预申请的连续大块(arena)上线性 bump 分配,退出作用域时整体释放。
这种模式带来三重收益:(1) 速度——bump 分配只是一个指针递增,纳秒级;(2) 确定性——没有碎片、没有系统调用,尾延迟可预测;(3) 缓存友好——连续内存对 prefetcher 极其友好,相关数据被装进同一组 cache line。Lakos 还指出,arena 让对象不必逐个析构,复杂图结构的回收成本从 O(n) 降为 O(1)。
实用价值:这一思想早已溢出 C++,渗透到游戏引擎(帧 arena)、Web 服务器(请求 arena)、数据库查询执行器、甚至 Go/Zig 的 arena 标准库实现。理解它,是理解所有"高性能分配"的钥匙。适合人群:系统/C++ 开发者、引擎与中间件作者。
视频:Designing Low-Latency Systems with Rust: An Architectural Deep Dive 链接:https://www.youtube.com/watch?v=Wlwm2TJko1o
核心洞察:本场工作坊式演讲把"为什么 Rust 适合低延迟"拆成了可落地的架构原则。最关键的反差在于——Rust 没有垃圾回收(GC)停顿,所有权模型让内存释放发生在编译期可预测的点,而非运行时随机暂停。这对延迟敏感系统是结构性优势:GC 语言(Java/Go 的 STW、C# 的 GC)在 P99.9 尾延迟上始终存在不可控抖动,而 Rust 的零成本抽象让你用高级语法写出零分配热路径。
演讲还点出几个低延迟 Rust 的实战要点:避免隐式分配(String/Vec 的扩容、迭代器的 collect 都可能触发分配);用 &[u8] 切片与栈上数组代替堆分配;善用 crossbeam/std::sync 的无锁通道;警惕 panic 与 unwind 的开销(生产用 panic = abort 或 abort-on-panic);用 #[inline] 与编译 profile(codegen-units=1、LTO、target-cpu=native)榨取最后一点性能。它也坦诚 Rust 在 编译时间 与 unsafe 边界管理 上的现实成本。
实用价值:为"该不该用 Rust 重写性能核心"提供决策框架,而非口号。适合人群:评估 Rust 落地低延迟场景的架构师、数据库/网络栈内核开发者。
视频:Work Contracts in Action: Advancing High-performance, Low-latency C++ Concurrency(CppCon) 链接:https://www.youtube.com/watch?v=5ghAa7B5bF0
核心洞察:2024 年提出的 Work Contracts 是一个 lock-free、wait-free 的并发框架,演讲聚焦它如何在不引入锁的抖动的前提下,组织高吞吐的并发工作流。传统 std::mutex 的问题不只是"慢",而是不可预测——一次锁竞争可能引发内核态 futex 睡眠与上下文切换,几十微秒就没了,对低延迟是灾难。Work Contracts 的设计哲学是用无等待(wait-free)的原子操作保证每个生产者/消费者都有进度,用细粒度的工作契约(work contract)而非粗粒度锁来协调。
底层关键概念包括:CAS(compare-and-swap)原子指令、内存序(memory ordering)——为什么 SeqCst 安全但贵,而 Acquire/Release 在多数场景已足够;伪共享(false sharing)——两个线程各自写不同变量却落在同一 cache line(64 字节)导致缓存行反复失效,是并发性能的隐形杀手(对策是 alignas(64) 缓存行对齐)。它还讨论了忙等轮询(busy-wait/spin) 与核心隔离的配合——在独占核心上 spin 才不会浪费,否则会抢占其他任务。
实用价值:超越"用个锁就行"的并发认知,进入真正实时、高吞吐的并发设计区。适合人群:并发库作者、实时系统/音视频/游戏服务器工程师。
视频:Maximising Throughput & Minimising Latency in High-Performance C++ Code 链接:https://www.youtube.com/watch?v=CvHKs9-eow4
核心洞察:这场演讲把一个常被混淆的命题掰开——吞吐(throughput)与延迟(latency)并非同义词,常常此消彼长。一个高吞吐的批处理管线,单次请求延迟可能很高;一个极致低延迟的设计,整体吞吐又可能上不去。关键在于认清你的系统到底被什么约束,并据此选择数据结构与算法。
演讲覆盖大量"缓存友好"的工程细节:数据局部性——数组(连续内存)比链表(指针跳转、缓存不友好)在现代 CPU 上快一个数量级;SoA vs AoS(结构数组 vs 数组结构)的取舍,按访问模式重排字段以提升 SIMD 与 cache 命中;分支消除(branchless)——用位运算与条件传送(cmov)代替易预测失败的 if;SIMD 向量化——一次处理 4/8/16 个数据。一个反复出现的洞见:算法复杂度(O(n))在数据规模小时,往往败给常数因子——一个缓存友好的 O(n) 线性扫描,在 L1 内可以暴打一个缓存不友好的 O(log n) 树查找。
实用价值:帮你跳出"只看大 O"的思维定势,建立缓存复杂度(cache complexity) 的直觉。适合人群:中间件、存储引擎、基础设施开发者。
视频:Why Rust Will Help You Deliver Better Low-latency Systems and Happier Engineers — Andrew Lamb 链接:https://www.youtube.com/watch?v=UbgX100pl4k
核心洞察:Andrew Lamb(数据库引擎开发老兵)这场演讲的独特角度,是从工程团队与可维护性视角论证 Rust,而非只谈性能。他承认 C++ 在极致 HFT 生态(库、工具、人才)上仍有积累,但指出长期维护一个大型 C++ 性能核心的隐性成本极高:未定义行为(UB)导致的 heisenbug、内存安全漏洞、构建系统的脆弱、依赖管理的痛苦。Rust 用编译期保证在不牺牲运行时零开销的前提下,把这些维护成本系统性压低。
他特别强调"更快乐的工程师(happier engineers)"——当编译器替你拦截了内存与并发错误,团队可以把精力从"调试诡异的崩溃"转移到"打磨真正的性能"。演讲还讨论了渐进式迁移策略:用 Rust 重写性能关键的内层循环(hot inner loop),通过 FFI/CXX 与现有 C++ 主体共存,而非推倒重来。这正是 InfluxDB、Discord、Cloudflare 等公司采用的现实路径。
实用价值:给"性能 vs 安全 vs 维护性"这个铁三角提供了一套可量化、可落地的工程权衡框架。适合人群:技术负责人、面临"性能核心技术债"的平台/数据库团队。
flowchart TD
ROOT["性能工程 / 低延迟<br/>目标:确定且可预测的尾延迟"]
ROOT --> L1["① 测量层<br/>Measure"]
ROOT --> L2["② 内存层<br/>Memory"]
ROOT --> L3["③ 并发层<br/>Concurrency"]
ROOT --> L4["④ 架构层<br/>Architecture"]
ROOT --> L5["⑤ 应用层<br/>Application"]
L1 --> L1A["基准测试纪律<br/>Chandler Carruth"]
L1 --> L1B["火焰图 / eBPF 采样<br/>Brendan Gregg"]
L1 --> L1C["看汇编, 统计稳健采样"]
L2 --> L2A["Arena 区域分配<br/>John Lakos"]
L2 --> L2B["SLAB/SLUB 内核分配器"]
L2 --> L2C["热路径零分配<br/>缓存行局部性"]
L3 --> L3A["Work Contracts 无锁框架"]
L3 --> L3B["CAS / 内存序<br/>Acquire-Release"]
L3 --> L3C["消除伪共享<br/>cache-line 对齐"]
L4 --> L4A["Rust 零开销抽象<br/>无 GC 停顿"]
L4 --> L4B["吞吐 vs 延迟权衡"]
L4 --> L4C["SoA/分支消除/SIMD"]
L5 --> L5A["HFT 抢价回路<br/>David Gross"]
L5 --> L5B["内核旁路 / DPDK"]
L5 --> L5C["核心隔离 isolcpus"]
L1A -.可信测量.-> L2A
L2C -.确定性.-> L3A
L4A -.内存安全.-> L5A
style ROOT fill:#1f6feb,color:#fff
style L1 fill:#0d1117,color:#c9d1d9
style L2 fill:#0d1117,color:#c9d1d9
style L3 fill:#0d1117,color:#c9d1d9
style L4 fill:#0d1117,color:#c9d1d9
style L5 fill:#0d1117,color:#c9d1d9
读图指引:低延迟工程自下而上分为五层,测量层是地基——没有可信测量,上层一切优化都是空中楼阁;内存层与并发层是两大主战场,决定尾延迟的下限;架构层(语言/数据布局)决定上限;应用层(HFT、实时渲染、内核旁路)是终极验证场。五层之间用虚线标出关键因果链:可信测量→确定性分配→无锁并发→内存安全→稳定的纳秒回路。
flowchart LR
OPS["一次常见操作的成本(量级)"]
OPS --> A["寄存器/ALU 运算<br/>≈ 0.3 ns"]
OPS --> B["L1 缓存命中<br/>≈ 1 ns"]
OPS --> C["分支预测失败<br/>≈ 10-20 ns"]
OPS --> D["L3 缓存命中<br/>≈ 10 ns"]
OPS --> E["主存访问<br/>≈ 100 ns"]
OPS --> F["一次 mutex 锁竞争/上下文切换<br/>≈ 数千-数万 ns"]
OPS --> G["一次系统调用/磁盘 IO<br/>≈ 微秒-毫秒"]
style A fill:#2ea043,color:#fff
style B fill:#2ea043,color:#fff
style C fill:#d29922,color:#000
style D fill:#d29922,color:#000
style E fill:#da3633,color:#fff
style F fill:#da3633,color:#fff
style G fill:#6e40c9,color:#fff
这张量级图是理解所有七场演讲的共同底座:性能工程的本质,就是让热路径上的操作尽量停留在绿色区(缓存命中、寄存器运算),把红色区(主存 miss、锁、系统调用)从关键路径上彻底驱逐。 一次锁竞争吃掉的纳秒,可能等于数万次 L1 命中——这就是为什么"无锁""零分配""缓存友好"反复出现在每一场演讲里。
@handmadehero)—— "Performance-Aware Programming" 系列,从游戏引擎视角逐行拆解性能,是理解"clean code 在热路径上是性能毒药"这一反直觉观点的最佳来源。@Computerphile)—— 诺丁汉大学出品,把 cache、内存管理、指令流水线讲得通俗而严谨,适合补底层基础。watch?v=_xdNWSobYMM)—— 想理解 arena 之外的工业级分配器如何取舍碎片率、速度与内存占用,值得一看。七强共同指向一个朴素结论:低延迟不是把代码写得更"巧",而是把不确定性从系统中系统性地驱逐出去。 它要求你同时是测量学家、计算机体系结构学者、内存管家和并发设计师。当你下次面对一段"偶尔卡一下"的程序,不妨回到那张量级图——你丢掉的纳秒,99% 不在 CPU 运算里,而在某个你没意识到的缓存未命中、内存分配或锁等待中。
本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
