|This article does not cite any references or sources. (March 2009)|
In computer science, overhead is any combination of excess or indirect computation time, memory, bandwidth, or other resources that are required to attain a particular goal. It is a special case of engineering overhead.
- Invoking a function
||It has been suggested that Protocol overhead be merged into this section. (Discuss) Proposed since December 2014.|
- Sending a payload of data (reliably) over a communications network requires sending more than just the desired payload data, itself. It also involves sending various control and signalling data (TCP) required to achieve the reliable transmission of the desired data in question. The control signalling is overhead.
- A simplified version is the need and time to dial a number to establish a phone call, before the call can take place. Dialing the number and establishing the call are overhead.
- Another simplified scenario is in the use of 2-way (but half-duplex) radios. Overhead would be the use of “over” and other signalling needed to avoid collisions, as extra traffic to that of the actual message(s) to be conveyed.
Choice of algorithm
A programmer/software engineer may have a choice of several algorithms, each of which have known characteristics. When choosing among them, their respective overhead should also be considered.
In software engineering, overhead can influence the decision whether or not to include features in new products, or indeed whether to fix bugs. A feature that has a high overhead may not be included – or needs a big financial incentive to do so. Often, even though software providers are well aware of bugs in their products, the payoff of fixing them is not worth the reward, because of the overhead.
Algorithmic complexity is generally specified using Big O Notation. This makes no comment on how long something takes to run or how much memory it uses, but how its increase depends on the size of the input. Overhead is deliberately not part of this calculation, since it varies from one machine to another, whereas the fundamental running time of an algorithm does not.
This should be contrasted with algorithmic efficiency, which takes into account all kinds of resources – a combination (though not a trivial one) of complexity and overhead.
|This software engineering–related article is a stub. You can help Wikipedia by expanding it.|