Что такое "накладные расходы"?

Я студент в области компьютерных наук, и я часто слышу слово "накладные расходы", когда речь заходит о программах и родах. Что это значит?

Ответ 1

Это ресурсы, необходимые для настройки операции. Это может показаться несвязанным, но необходимым.

Как будто вам нужно куда-то ехать, вам может понадобиться машина. Но на дороге было бы много накладных, чтобы получить машину, чтобы спуститься по улице, чтобы вы могли ходить. Однако накладные расходы будут стоить того, если вы собираетесь пересечь страну.

В информатике иногда мы используем автомобили, чтобы спуститься по улице, потому что у нас нет лучшего способа, или это не стоит нашего времени, чтобы "научиться ходить".

Ответ 2

Значение слова может сильно отличаться от контекста. В общем, он использует ресурсы (чаще всего время памяти и процессорное время), которые не вносят непосредственного вклада в предполагаемый результат, но требуются с помощью технологии или метода, который используется. Примеры:

  • Накладные расходы протокола. Кадры Ethernet, IP-пакеты и TCP-сегменты имеют заголовки, для TCP-соединений требуются пакеты квитирования. Таким образом, вы не можете использовать всю ширину полосы пропускания, которую оборудование может использовать для ваших фактических данных. Вы можете уменьшить накладные расходы, используя более крупные размеры пакетов, а UDP имеет меньший заголовок и отсутствие рукопожатия.
  • Накладные расходы памяти данных. Для связанного списка требуется по крайней мере один указатель для каждого содержащегося в нем элемента. Если элементы имеют тот же размер, что и указатель, это означает 50% накладных расходов памяти, тогда как массив может иметь 0% служебных данных.
  • Навыки вызова метода: хорошо продуманная программа разбита на множество коротких методов. Но каждый вызов метода требует установки фрейма стека, копирования параметров и обратного адреса. Это представляет собой накладные расходы процессора по сравнению с программой, которая делает все в одной монолитной функции. Конечно, добавленная ремонтопригодность делает его очень ценным, но в некоторых случаях чрезмерные вызовы методов могут иметь значительное влияние на производительность.

Ответ 3

Википедия нас охватывает:

В информатике служебные данныеобычно считается любая комбинация избыточных или косвенных вычислений времени, памяти, полосы пропускания или других ресурсы, необходимые для достижения особая цель. Это особый случай инженерных накладных расходов.

Ответ 4

Ты устал и не можешь больше работать. Вы едите пищу. Энергия, потраченная на поиски пищи, получение ее и на самом деле ее потребление, потребляет энергию и накладные расходы!

Накладные расходы - это что-то потраченное впустую, чтобы выполнить задачу. Цель состоит в том, чтобы сделать накладные расходы очень маленькими.

В информатике скажут, что вы хотите напечатать номер, это ваша задача. Но сохранение номера, настройка дисплея для его печати и вызов процедур для его печати, а затем доступ к числу из переменной - все накладные расходы.

Ответ 5

Накладные расходы обычно относятся к количеству дополнительных ресурсов (памяти, процессора, времени и т.д.), которые берут на себя различные алгоритмы программирования.

Например, накладные расходы на вставку в сбалансированное двоичное дерево могут быть намного больше, чем одна и та же вставка в простой Связанный список (вставка займет больше времени, использует больше вычислительной мощности для балансировки дерева, что приводит к более длительному прочтению время работы пользователя).

Ответ 6

Для служебных программ программистов относятся к тем системным ресурсам, которые потребляются вашим кодом, когда он работает на дающей платформе по заданному набору входных данных. Обычно этот термин используется в контексте сравнения различных реализаций или возможных реализаций.

Например, мы могли бы сказать, что конкретный подход может привести к значительным накладным расходам ЦП, в то время как другой может повлечь за собой дополнительные издержки памяти, а другой может быть привязан к сетевым издержкам (и, соответственно, к ним относится внешняя зависимость).

Приведем конкретный пример: вычислите среднее (среднее арифметическое) множество чисел.

Очевидный подход состоит в том, чтобы перебирать входы, сохраняя общее количество и количество. Когда встречается последнее число (сигнализируется "конец файла" EOF или какое-либо значение дозорного значения или какой-либо GUI файл, независимо от того), мы просто делим общее количество на количество входов, и мы закончили.

Этот подход практически не наносит накладных расходов на процессор, память или другие ресурсы. (Это тривиальная задача).

Еще один возможный подход - "прорвать" ввод в список. итерации по списку для вычисления суммы, затем разделите это на количество допустимых элементов из списка.

Для сравнения, этот подход может привести к произвольному количеству накладных расходов памяти.

В конкретной плохой реализации мы можем выполнить операцию суммирования с использованием рекурсии, но без устранения хвоста. Теперь, помимо накладных расходов на память для нашего списка, мы также вводим накладные расходы накладные расходы (это другой тип памяти и часто является более ограниченным ресурсом, чем другие формы памяти).

Еще один (возможно, более абсурдный) подход заключался бы в том, чтобы опубликовать все входы в некоторую таблицу SQL в СУБД. Затем просто вызовите функцию SQL SUM в этом столбце этой таблицы. Это переносит наши локальные операционные издержки на память на какой-то другой сервер, а также наносит накладные расходы сети и внешние зависимости от нашего выполнения. (Обратите внимание, что удаленный сервер может иметь или не иметь каких-либо определенных служебных данных памяти, связанных с этой задачей, - например, он может вывести все значения сразу на хранение).

Гипотетически может быть рассмотрена реализация на каком-то кластере (возможно, сделать возможным усреднение триллионов значений). В этом случае любое необходимое кодирование и распределение значений (отображение их на узлы) и сбор/сопоставление результатов (сокращения) будут считаться служебными.

Мы также можем говорить о накладных расходах, связанных с факторами, выходящими за рамки собственного кода программиста. Например, компиляция некоторого кода для 32- или 64-разрядных процессоров может повлечь большие накладные расходы, чем можно было бы увидеть для старой 8-битной или 16-разрядной архитектуры. Это может быть связано с большими издержками памяти (проблемы с выравниванием) или накладными расходами ЦП (где ЦП вынужден настраивать порядок битов или использовать невыложенные инструкции и т.д.) Или и то, и другое.

Обратите внимание, что дисковое пространство, занимаемое вашим кодом, его библиотеками и т.д., обычно не называется "служебным", а скорее называется "footprint". Кроме того, базовая память, которую потребляет ваша программа (независимо от любого набора данных, который она обрабатывает), также называется "footprint".

Ответ 7

Вы можете использовать словарь. Определение одно и то же. Но чтобы сэкономить ваше время, накладные расходы - это работа, необходимая для выполнения производительной работы. Например, алгоритм работает и делает полезную работу, но требует, чтобы память выполняла свою работу. Это распределение памяти требует времени и напрямую не связано с выполняемой работой, поэтому это накладные расходы.

Ответ 8

Вы можете проверить Wikipedia. Но главным образом, когда используются больше действий или ресурсов. Например, если вы знакомы с .NET, вы можете иметь типы значений и типы ссылок. У ссылочных типов есть служебные данные памяти, так как они требуют больше памяти, чем типы значений.

Ответ 9

Конкретным примером накладных расходов является различие между "локальным" вызовом процедуры и вызовом процедуры "remote".

Например, при использовании классического RPC (и многих других удаленных фреймворков, таких как EJB) вызов функции или метода выглядит одинаково для кодера, независимо от того, является ли он локальным, в вызове памяти или распределенным сетевым вызовом.

Например:

service.function(param1, param2);

Это обычный метод или удаленный метод? Из того, что вы видите здесь, вы не можете сказать.

Но вы можете себе представить, что разница в времени выполнения между двумя вызовами является драматической.

Итак, хотя основная реализация будет "стоить одно и то же", задействованные "служебные" задачи совершенно разные.

Ответ 10

Подумайте о накладных расходах, как о времени, требуемом для управления потоками и координации между ними. Это бремя, если в потоке недостаточно работы. В таком случае накладные расходы превышают затраченное время с помощью потоковой передачи, а код занимает больше времени, чем последовательный.