每周性能技巧 #9:过了黄金期的优化

本节阅读量:

本文翻译自 Abseil 官网的 Performance Tip of the Week #9: Optimizations that aren’t in the prime of their lives

原文发布于 2019 年 7 月 11 日,作者 Chris Kennelly,更新于 2025 年 9 月 3 日。

优化并不会永远有效。随着硬件、编译器、库和工作负载变化,曾经正确的优化可能变成无效,甚至变成回退。本篇讨论为什么要重新审视旧优化。

优化会老化

很多优化依赖当时环境中的事实:

  • 某个函数是热点。
  • 某种数据布局更适合当时硬件。
  • 编译器不能自动完成某个变换。
  • 某个库实现有特定成本。
  • 工作负载输入分布稳定。

几年后,这些事实可能不再成立。编译器变强、硬件缓存层次变化、基础库被重写、服务流量形态改变,都会改变优化的收益。

旧优化的成本

过时优化仍然会保留成本:

  • 更复杂的代码。
  • 更多配置和特殊路径。
  • 更难测试和维护。
  • 阻碍新优化。
  • 让读者误以为某个古老假设仍然成立。

如果收益消失,剩下的就是技术债。

定期重新测量

对于重要优化,应定期在当前环境中重新测量。重新测量不一定意味着从零做完整研究,但至少要确认:

  • 目标路径仍然热。
  • 改动仍然改善主指标。
  • 权衡仍然可接受。
  • 是否有更简单的新实现。

当旧优化不再提供价值时,删除它可能本身就是优化。

让优化更容易更新

为了避免优化老化后难以移除,可以:

  • 把优化封装在清晰边界内。
  • 保留测试和 benchmark,说明它想保护什么。
  • 避免过度配置。
  • 文档化关键假设。
  • 使用能代表真实工作负载的指标。

这样未来的人更容易判断它是否仍然有效。

结语

优化是一种随环境变化而老化的资产。持续测量、清晰假设和愿意删除旧代码,可以让性能工程保持健康。

上一篇:每周性能技巧 #53:使用硬件性能计数器精确测量 C++ 基准

上一节

下一篇:首页

下一节