本文档概述了编写高性能Go代码的最佳实践。
虽然有些讨论会提高单个服务的速度(通过缓存等),但设计高性能的分布式系统已经超出了这项工作的范围。在监控和分布式系统设计方面已经有很好的文章,它包含了一套完全不同的研究和设计权衡理论。
所有内容将根据CC-BY-SA进行许可。
本书分为以下几节:
1) 编写高性能软件的基本技巧
* CS 101-level的东西
2) 编写快速软件的技巧
* 关于如何从Go获得最佳效果的Go-specific章节
3) 编写*真正*快速软件的高级技巧
* 当你优化的代码不够快时
我们可以总结这三个部分:
- “合理的”
- “慎重的”
- “危险的”
我先把这个放在第一位,是因为这真的是最重要的一步。你真的应该这么做吗?
每个优化都有成本。通常,这个成本是用代码复杂度或认知负载来承担的 - 优化后的代码很少比优化前的版本简单。
但另一方面,我称之为“优化经济学”。作为程序员,你的时间是宝贵的。你可以为你的项目工作的机会成本,哪些Bug需要修复,以及需要添加哪些功能。优化的工作是很有趣的,但并不总是正确的选择。性能是一种特性,但交付和正确性也是如此。
选择最重要的工作。有时它不是一个实际的CPU优化,而是一个用户体验。就像添加进度条一样简单,或者在渲染页面后通过在后台执行计算来提高页面的响应速度。
有时这是显而易见的:在三小时内完成的报告在一小时完成可能不太有用。
仅仅因为容易优化并不意味着它是值得优化的。忽略low-hang的效果是一种有效的发展战略。
把这看作是优化你的时间。
选择要优化的内容以及何时优化,你可以在“软件质量”和“开发速度”之间移动滑