01
性能调优概述
为什么要做性能调优?性能指标(CPU、内存、IO、延迟、吞吐量)的定义与测量。
指标测量
02
编译器优化基础
GCC/Clang常用优化选项(-O0, -O1, -O2, -O3, -Os)的原理与选择策略。
GCCClang-O3
03
数据结构选择
数组 vs 链表 vs 哈希表在不同场景下的性能差异,缓存行对齐的影响。
数组链表缓存行
04
循环优化技巧
循环展开、循环合并、循环交换、循环剥离,减少分支预测失败。
循环展开分支预测
05
内存访问模式
局部性原理(时间局部性与空间局部性),如何利用缓存预取。
局部性预取
06
函数调用开销
内联函数、尾递归优化、函数属性(__attribute__((always_inline)))的使用。
内联尾递归
07
分支预测优化
likely/unlikely宏、减少复杂条件表达式、查表法替代分支。
likely查表法
08
位运算技巧
用位运算替代乘除法、判断奇偶、交换变量、位掩码操作。
位运算掩码
09
SIMD指令集入门
SSE/AVX基础,向量化加法、乘法,如何让编译器自动向量化。
SSEAVX向量化
10
多线程编程基础
pthread创建与销毁、线程同步(互斥锁、条件变量)的性能开销。
pthread互斥锁
11
锁优化策略
读写锁、自旋锁、无锁编程(CAS原子操作)、减少锁粒度。
读写锁CAS无锁
12
内存分配优化
malloc/free的陷阱,使用内存池(jemalloc/tcmalloc)替代系统分配器。
内存池jemalloc
13
缓存友好设计
结构体字段重排(减少填充)、数据对齐、分离热数据与冷数据。
对齐热数据
14
字符串处理优化
避免strlen重复调用、使用memcpy替代strcpy、字符串拼接的陷阱。
memcpystrlen
15
I/O性能优化
缓冲区设置、mmap vs read/write、异步I/O(aio)基础。
mmapaio
16
编译时计算
constexpr、宏定义、模板元编程(C++)在C中的替代方案。
constexpr宏
17
性能分析工具(上)
gprof的使用,如何解读调用图与热点函数。
gprof调用图
18
性能分析工具(下)
perf的使用,采样与计数,火焰图生成与解读。
perf火焰图
19
代码剖象与热点定位
Valgrind/Callgrind的使用,Cachegrind缓存模拟分析。
ValgrindCachegrind
20
汇编级优化
阅读编译器生成的汇编代码,识别冗余指令,手动调整内联汇编。
汇编内联汇编
21
链接时优化
LTO(链接时优化)的原理与开启方法,减少符号解析开销。
LTO链接优化
22
预计算与查表法
用空间换时间,预计算三角函数、CRC表、素数表。
查表法CRC
23
延迟计算与懒初始化
按需创建资源,减少启动时间,double-checked locking模式。
懒加载DCL
24
代码规模控制
减少代码膨胀,函数拆分与内联的平衡,死代码消除。
代码膨胀死代码
25
实时系统优化
硬实时与软实时的区别,优先级反转,锁的实时性影响。
实时优先级反转
26
网络编程优化
epoll vs select/poll,零拷贝技术(sendfile),TCP_NODELAY。
epoll零拷贝
27
GPU与异构计算入门
CUDA基础,数据并行模型,CPU与GPU协同优化。
CUDA异构
28
功耗优化
动态频率调整(DVFS)、休眠状态、减少不必要的计算。
DVFS功耗
29
案例实战(一)
图像处理算法(高斯模糊)从O(n²)优化到O(n)的完整过程。
高斯模糊O(n)
30
案例实战(二)
Web服务器(简易HTTP Server)从单线程到多线程Reactor模型的性能提升。
ReactorHTTP