Overhead
Da Wikipedia, l'enciclopedia libera.
In informatica, la parola inglese overhead (letteralmente in alto, che sta di sopra) serve per definire le risorse accessorie, richieste in sovrappiù rispetto a quelle strettamente necessarie, per ottenere un determinato scopo in seguito all'introduzione di un metodo o di un processo più evoluto o più generale.
Indice |
[modifica] Alcuni esempi
[modifica] Programmazione
Nei linguaggi di programmazione ad alto livello, un esempio di overhead riguarda il tempo di esecuzione dei sottoprogrammi: al tempo da questi impiegato per svolgere il loro compito (ad esempio il calcolo di una radice quadrata) si aggiunge infatti il tempo necessario a gestire il meccanismo stesso di chiamata a sottoprogramma attraverso record di attivazione. Questo tempo aggiuntivo può essere ridotto con un uso accorto di specifiche tecniche di ottimizzazione, ma non può essere eliminato del tutto.
In generale, più i linguaggi di programmazione sono ad alto livello maggiore tende a essere l'overhead associato ai loro meccanismi di funzionamento. L'overhead necessario a chiamare un metodo in un linguaggio di programmazione object oriented, per esempio, è superiore a quello necessario a chiamare un sottoprogramma di un linguaggio procedurale, a causa della necessità di risolvere dinamicamente situazioni di overriding.
Sempre in generale, e per motivi analoghi, l'overhead aumenta se si sovrappongono strati di astrazione. Un esempio in questo senso potrebbe essere quello di una classe (C++, Java, ecc.) che incapsula un'API in linguaggio C. In questo caso, l'invocazione di un metodo della classe comporterà sia l'overhead proprio della chiamata di metodo che quello, immediatamente successivo, legato alla chiamata della funzione C sottostante.
Per questi motivi, nello sviluppo di sistemi con forti requisiti a livello di prestazioni si opta talvolta per strumenti di programmazione "a basso livello" (come il linguaggio C o addirittura l'assembler) che consentono di contenere i costi di overhead al prezzo di una maggior difficoltà nella scrittura del programma.
[modifica] Reti di computer
Nelle reti di computer, il termine "overhead" si riferisce a quella parte di banda di trasmissione che viene utilizzata per spedire, anziché informazione utile, dati aggiuntivi necessari per il particolare protocollo di rete utilizzato. Anche in questo caso, la presenza di molteplici livelli di astrazione (caratteristica tipica dell'architettura dei protocolli di rete) si traduce in un sommarsi dell'overhead imposto da ciascun livello. In termini pratici, questo overhead si concretizza nella maggior parte dei casi nell'introduzione di un cosiddetto header dei messaggi che contiene, per esempio, l'indirizzo di destinazione e altre informazioni. (Per una analogia, si pensi all'indirizzo scritto su una busta, o alla busta stessa, come un overhead necessario per spedire l'informazione utile, ovvero la lettera contenuta nella busta).
[modifica] Processi di sviluppo
Nell'ambito di un progetto di sviluppo di un prodotto, il "lavoro utile" è quello direttamente finalizzato alla realizzazione del prodotto. Eventuale lavoro aggiuntivo necessario per amministrare il progetto (per esempio nel contesto di un determinato modello di processo) può essere quindi identificato come "overhead".