软件设计的哲学:第二十章 性能设计

到目前为止,软件设计的讨论都集中在复杂性上,我们的目标是使软件尽可能的简单和易懂。但是,如果您正在开发一个需要快速的系统,该怎么办呢?性能考虑应该如何影响设计过程?本章讨论如何在不牺牲干净设计的前提下实现高性能。最重要的思想仍然是简单性:简单性不仅改进了系统的设计,而且通常使系统运行得更快。

20.1 如何考虑性能

要解决的第一个问题是“在正常的开发过程中,您应该在多大程度上担心性能?”“如果你试图优化每条语句以获得最大的速度,就会降低开发速度,并产生大量不必要的复杂性。此外,许多“优化”实际上并不能提高性能。另一方面,如果您完全忽略了性能问题,那么很容易在整个代码中出现大量显著的效率低下;得到的系统很容易比需要的速度慢5 - 10倍。在这种“死于千刀万剐”的情况下,以后很难再回过头来改进性能,因为没有一个改进会有很大的影响。

最好的方法是介于这两个极端之间,即使用基本的性能知识来选择“自然有效”但又干净简单的设计替代方案。关键是要意识到哪些操作从根本上是昂贵的。以下是一些如今相对昂贵的操作例子:

  • 网络通信: 即使是在一个数据中心,一个双向消息交换可以10 - 50µs,成千上万的指令。广域往返可能需要10-100毫秒。
  • 从I/O到辅助存储器: 磁盘I/O操作通常需要5-10 ms,这是数百万次的指令时间。闪存µs需要10 - 100。新兴的非易失性记忆可能1µs一样快,但这仍然是大约2000指令。
  • 动态内存分配 (C中的malloc, c++或Java中的new)通常涉及分配、释放和垃圾收集的大量开销。
  • 缓存丢失: 从DRAM获取数据到片上处理器缓存需要几百次指令;在许多程序中,总体性能由缓存丢失和计算开销决定。

了解哪些东西比较昂贵的最佳方法是运行微基准测试(单独测量单个操作成本的小程序)。在RAMCloud项目中,我们创建了一个提供微基准测试框架的简单程序。创建这个框架花了几天时间,但是这个框架使得在5到10分钟内添加新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值