Go 应用性能优化:深入理解 CPU 缓存
1. 性能优化原则
在大多数情况下,编写可读性强、清晰的代码比编写经过优化但更复杂且难以理解的代码更好。优化通常需要付出代价,我们应遵循软件工程师 Wes Dyer 的名言:“先确保代码正确,再使其清晰,接着让它简洁,最后追求速度,按此顺序进行。”不过,这并不意味着禁止对应用程序进行速度和效率方面的优化。例如,为了让客户满意或降低成本,我们可以尝试找出需要优化的代码路径。
2. 机械同情与 CPU 缓存
2.1 机械同情概念
机械同情这一术语由三届 F1 世界冠军 Jackie Stewart 提出,意思是当我们了解一个系统(如 F1 赛车、飞机或计算机)的设计用途时,就能与设计相契合,从而获得最佳性能。在优化 Go 应用程序时,理解 CPU 缓存的工作原理就是机械同情的体现。
2.2 CPU 架构
以 Intel Core i5 - 7300 为例,现代 CPU 依靠缓存来加速内存访问,通常有三个缓存级别:L1、L2 和 L3。i5 - 7300 的缓存大小如下:
| 缓存级别 | 大小 |
| ---- | ---- |
| L1 | 64 KB |
| L2 | 256 KB |
| L3 | 4 MB |
i5 - 7300 有两个物理核心和四个逻辑核心(也称为虚拟核心或线程),将物理核心划分为多个逻辑核心的技术在 Intel 家族中称为超线程技术。L1 缓存又分为两个子缓存:L1D 用于数据,L1I 用于指令,每个子缓存大小为 32 KB。
不同缓存级别的访问速度差异
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



