基准输入
了解你的每种输入尺寸可能在生产中有多大。
你的基准测试必须使用适当大小的输入。正如我们所看到的,不同的算法在不同的输入大小下都有意义。如果你的预期输入范围<100,那么你的基准应该反映这一点。否则,选择最适合n = 10 ^ 6的算法可能不是最快的。
能够生成有代表性的测试数据。不同的数据分布会在你的算法中引发不同的行为:想想经典的“数据排序时快速排序为O(n ^ 2)”示例。类似地,对于均匀的随机数据,插值搜索是O(log log n),但是O(n)最差的情况。知道你的输入是什么样子是代表性基准和选择最佳算法的关键。如果你用来测试的数据不能代表实际工作负载,那么你可以轻松完成针对某个特定数据集的优化,“过度配置”你的代码以便使用一组特定的输入进行最佳工作。
这也意味着你的基准数据需要代表真实世界。如果重复的请求非常少见,保留它们比重新计算它们更昂贵。如果你的基准数据仅包含相同的重复请求,则缓存将提供不准确的性能视图。
另请注意,一旦部署到生产环境并且在40核心服务器上达到25万次/秒,笔记本电脑上可能看不到的一些问题就可以看到。
编写好的基准测试可能很困难。
TODO:microbenchmarks显示速度减慢但宏观(现实世界)性能提高的情况。