我是一名计算机科学专业的学生,​​当谈到程序和排序时,我经常听到“开销”这个词。这究竟意味着什么?

有帮助吗?

解决方案

这是设置操作所需的资源。这似乎无关,但有必要。

就像当您需要去某个地方时,您可能需要一辆汽车。但是,要开车沿着街道开车,这将是很多开销,所以您可能想走路。但是,如果您遍及全国,开销将是值得的。

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

其他提示

单词的含义在上下文中可能有很大差异。通常,使用的是使用的资源(最常见的内存和CPU时间),这些资源不会直接贡献预期结果,而是使用所使用的技术或方法所必需的。例子:

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

您累了,不能再做任何工作。你吃食物。花费的精力寻找食物,获取食物并实际吃的食物会消耗能量,并且是高架的!

开销是为了完成任务而浪费的东西。目的是使开销非常小。

在计算机科学中,您想打印一个数字,这就是您的任务。但是,存储数字,设置显示器以打印它并调用例程以打印它,然后从变量上访问数字是全部开销。

维基百科 我们覆盖了吗?:

在计算机科学领域, 高架 通常被认为是实现特定目标所需的过剩或间接计算时间,内存,带宽或其他资源的任何组合。这是工程开销的特殊情况。

开销通常会转换为不同编程算法所采用的额外资源(内存,处理器,时间等)的数量。

例如,将插入平衡的二进制树插入的开销可能比同一插入列表大得多(插入列表将需要更长的时间,使用更多的处理能力来平衡树,这会导致更长的perccer percceper percced percced percced taby percception tim用户)。

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

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

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

显而易见的方法是循环输入,保留运行总计和计数。当遇到最后一个数字时(由“文件结束”EOF 或某些哨兵值或某些 GUI 按钮等发出信号),我们只需将总数除以输入数即可。

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

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

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

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

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

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

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

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

您可以使用词典。定义是相同的。但是为了节省您的时间,开销是进行生产力工作所需的工作。例如,算法运行并进行有用的工作,但需要内存才能完成其工作。此内存分配需要时间,并且与所完成的工作无直接相关,因此是开销。

开销仅仅是程序执行的时间消耗越多。例子 ;当我们调用函数并通过定义其控制的地方传递其控件时,这意味着我们使我们的CPU通过较长的过程运行(首先将控件传递到内存中的其他位置,然后在此执行,然后执行将控件传递回前位置),因此需要大量的性能时间,因此开销。我们的目标是通过在函数定义和呼叫时间内使用内联用内联用户来减少此开销,该函数在函数调用中复制了功能的内容,因此我们不将控件传递到其他位置,但请继续我们的程序,因此在线,因此内线。

您可以检查 维基百科. 。但主要是使用更多的动作或资源。就像您熟悉.NET一样,您可以拥有价值类型和参考类型。参考类型具有内存开销,因为它们需要比值类型更多的内存。

开销的具体示例是“本地”过程调用与“远程”过程调用之间的区别。

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

例如:

service.function(param1, param2);

这是一种普通方法还是远程方法?从您在这里看到的东西,您无法分辨。

但是您可以想象,两个呼叫之间的执行时间差异是戏剧性的。

因此,尽管核心实施将“成本相同”,但所涉及的“开销”却大不相同。

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

除了数据本身,即TCP标志,标题,CRC,FCS等。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top