什么是“开销”?

时间:2010-05-18 19:04:07

标签: overhead

我是计算机科学专业的学生,​​在课程和课程方面,我听到了“开销”这个词。这究竟意味着什么?

12 个答案:

答案 0 :(得分:148)

这是设置操作所需的资源。它可能看似无关,但是必要。

就像你需要去某个地方一样,你可能需要一辆车。但是,要让汽车沿着街道行驶会有很多开销,所以你可能想要走路。但是,如果你要去全国各地,那么开销是值得的。

在计算机科学方面,有时我们会使用汽车走在街上,因为我们没有更好的方法,或者不值得花时间“学会走路”。

答案 1 :(得分:34)

这个词的含义可能与上下文有很大不同。通常,它使用的资源(通常是内存和CPU时间)不会直接影响预期结果,但是正在使用的技术或方法需要这些资源。例子:

  • 协议开销:以太网帧,IP数据包和TCP网段都有标头,TCP连接需要握手数据包。因此,您无法使用硬件能够为您的实际数据提供的整个带宽。您可以通过使用更大的数据包大小来减少开销,UDP具有更小的标头并且没有握手。
  • 数据结构内存开销:链接列表要求其包含的每个元素至少有一个指针。如果元素与指针的大小相同,则意味着50%的内存开销,而数组可能有0%的开销。
  • 方法调用开销:精心设计的程序分解为许多简短的方法。但是每个方法调用都需要设置堆栈帧,复制参数和返回地址。与在单个单片函数中执行所有操作的程序相比,这表示CPU开销。当然,增加的可维护性使其非常值得,但在某些情况下,过多的方法调用会对性能产生重大影响。

答案 2 :(得分:16)

你累了,不能做更多的工作。你吃的食物。寻找食物,获取食物并实际食用它所消耗的能量消耗能量并且是开销!

为了完成任务,开销是浪费的。目标是使开销非常小。

在计算机科学中,我们可以说你想打印一个数字,这就是你的任务。但是存储数字,设置显示以打印它并调用例程来打印它,然后从变量中访问数字都是开销。

答案 3 :(得分:15)

维基百科has us covered

  

在计算机科学中,开销是   一般认为是任何组合   过度或间接计算   时间,内存,带宽或其他   获得所需的资源   一个特定的目标。这是一个特殊的   工程开销案例。

答案 4 :(得分:10)

开销通常会引用不同编程算法所需的额外资源(内存,处理器,时间等)。

例如,插入到平衡二进制树中的开销可能比插入到简单链接列表中的相同插入要大得多(插入将花费更长时间,使用更多处理能力来平衡树,这会导致更长时间的执行用户的操作时间)。

答案 5 :(得分:4)

对于程序员开销是指代码在给定输入数据集上的给定平台上运行时所使用的系统资源。通常,该术语用于比较不同的实现或可能的实现。

例如,我们可能会说一个特定的方法可能会产生相当大的CPU开销,而另一个可能会产生更多的内存开销,而另一个可能会加重网络开销(例如,需要外部依赖)。

让我们举一个具体的例子:计算一组数字的平均值(算术平均值)。

显而易见的方法是循环输入,保持运行总计和计数。当遇到最后一个数字时(通过“文件结束”EOF,或某些标记值,或某些GUI按钮,无论如何),我们只需将总数除以输入数量,我们就完成了。

这种方法在CPU,内存或其他资源方面几乎不会产生任何开销。 (这是一项微不足道的任务)。

另一种可能的方法是将输入“啜饮”到列表中。迭代列表以计算总和,然后将其除以列表中的有效项目数。

相比之下,这种方法可能会产生任意数量的内存开销。

在一个特别糟糕的实现中,我们可能使用递归执行sum操作但没有尾部消除。现在,除了我们列表的内存开销之外,我们还引入了堆栈开销(这是一种不同类型的内存,并且通常是比其他形式的内存更有限的资源)。

另一种(可能更荒谬的)方法是将所有输入发布到RDBMS中的某个SQL表。然后只需在该表的该列上调用SQL SUM函数。这会将我们的本地内存开销转移到其他服务器,并导致网络开销和外部依赖性。 (请注意,远程服务器可能会或可能不会有与此任务相关的任何特定内存开销 - 例如,它可能会立即将所有值推送到存储中。)

假设可以考虑在某种类型的集群上实现(可能使数万亿值的平均值可行)。在这种情况下,任何必要的值的编码和分配(将它们映射到节点)和结果的收集/整理(减少)都将计入开销。

我们还可以讨论程序员自己的代码之外的因素所带来的开销。例如,为32位或64位处理器编译某些代码可能需要比旧的8位或16位架构更大的开销。这可能涉及更大的内存开销(对齐问题)或CPU开销(CPU强制调整位排序或使用非对齐指令等)或两者兼而有之。

请注意,代码及其库等占用的磁盘空间通常不称为“开销”,而是称为“足迹”。程序使用的基本内存(不考虑它正在处理的任何数据集)也被称为“足迹”。

答案 6 :(得分:1)

你可以使用字典。定义是一样的。但为了节省您的时间,Overhead是完成高效工作所需的工作。例如,算法运行并执行有用的工作,但需要内存来完成其工作。这种内存分配需要时间,并且与正在完成的工作没有直接关系,因此是开销。

答案 7 :(得分:0)

您可以查看Wikipedia。但主要是在使用更多动作或资源时。就像您熟悉.NET一样,您可以拥有值类型和引用类型。引用类型具有内存开销,因为它们需要比值类型更多的内存。

答案 8 :(得分:0)

开销的一个具体例子是“本地”过程调用和“远程”过程调用之间的区别。

例如,对于经典RPC(以及许多其他远程框架,如EJB),函数或方法调用对于编码器看起来是相同的,无论是本地,内存调用还是分布式网络调用。

例如:

service.function(param1, param2);

这是正常方法还是远程方法?从你在这里看到的你无法分辨。

但是你可以想象两次通话之间的执行时间差异很大。

因此,虽然核心实现“成本相同”,但所涉及的“开销”却大相径庭。

答案 9 :(得分:0)

将开销考虑为管理线程并在它们之间进行协调所需的时间。如果线程没有足够的任务,这是一种负担。在这种情况下,开销成本超过了使用线程节省的时间,并且代码比顺序代码花费更多时间。

答案 10 :(得分:0)

开销只是程序执行中消耗的时间更多。例子;当我们调用一个函数并将其控件传递到定义它的位置,然后执行它的主体时,这意味着我们使我们的CPU经过很长的过程(首先将控件传递到内存中的其他位置,然后在其中执行,然后再执行将控件传递回原来的位置),因此需要花费大量的执行时间,因此会产生开销。我们的目标是通过在函数定义和调用期间使用内联来减少此开销,该内联将在函数调用时复制函数的内容,因此我们不将控件传递到其他位置,而是在一行中继续执行程序,因此是内联

答案 11 :(得分:-3)

除了数据本身以外的任何内容,即tcp标志,标头,crc,fcs等。