Frage

Ich bin ein Student in Informatik und ich höre das Wort „über Kopf“ eine Menge, wenn es um Programme und Sorten kommt. Was heißt das genau?

War es hilfreich?

Lösung

Es sind die erforderlichen Ressourcen einen Betrieb einzurichten. Es könnte scheinen, nicht verwandten, aber notwendig.

Es ist wie, wenn Sie irgendwo gehen müssen, könnten Sie ein Auto brauchen. Aber wäre es eine Menge Aufwand, ein Auto zu bekommen, die Straße zu fahren hinunter, so dass Sie gehen mögen. Allerdings wäre der Aufwand lohnt sich, wenn Sie im ganzen Land gingen.

In der Informatik, manchmal verwenden wir Autos auf die Straße zu gehen, weil wir keine bessere Art und Weise haben, oder es ist nicht wert unsere Zeit zu „lernen, wie man geht.“

Andere Tipps

Die Bedeutung des Wortes kann viel mit Kontext unterscheiden. Im Allgemeinen ist es Ressourcen (meist Speicher und CPU-Zeit), die verwendet werden, die nicht unmittelbar zum gewünschten Ergebnis, sondern werden von der Technologie oder Verfahren erforderlich, die verwendet wird. Beispiele:

  • Protokoll-Overhead : Ethernet-Frames, IP-Pakete und TCP-Segmente haben alle Header, TCP-Verbindungen erfordern Handshake-Pakete. So können Sie nicht die gesamte Bandbreite nutzen die Hardware für Ihre aktuellen Daten fähig ist. Sie können den Aufwand reduzieren, indem sie größere Paketgrößen verwendet und UDP hat einen kleineren Kopf und kein Handshake.
  • Datenstruktur Speicher-Overhead : Eine verkettete Liste benötigt mindestens einen Zeiger für jedes Element enthält. Wenn die Elemente die gleiche Größe wie ein Zeiger, bedeutet dies ein 50% Speicher-Overhead sind, während eine Reihe potenziell 0% Overhead hat.
  • Methodenaufruf Overhead : Ein gut konzipiertes Programm gliedert sich in viele kurze Methoden nach unten. Aber jeder Methodenaufruf erfordert einen Stapelrahmen, Kopierparameter und eine Absenderadresse einrichten. Dies stellt CPU-Overhead im Vergleich zu einem Programm, das alles in einer einzigen monolithischen Funktion tut. Natürlich macht das addierte Wartbarkeit es sehr viel wert, aber in einigen Fällen kann eine übermäßige Methodenaufrufe eine erhebliche Auswirkungen auf die Leistung haben.

Du bist müde und kann nicht mehr arbeiten. Du isst Essen. Die Energie verbrachte der Suche nach Nahrung, es immer und tatsächlich essen es verbraucht Energie und ist Overhead!

ist etwas Overhead, um verschwendete eine Aufgabe zu erfüllen. Ziel ist es, Overhead sehr, sehr klein zu machen.

Im Computer können Wissenschaft sagen Sie eine Nummer drucken möchten, das ist Ihre Aufgabe. Aber die Zahl zu speichern, um die Einrichtung der Anzeige ausdrucken und rufen Routinen, es zu drucken, dann die Anzahl von variablen Zugriff auf all oben.

hat uns bedeckt :

  

In der Informatik Überkopf ist   im Allgemeinen eine beliebige Kombination betrachtet   Über- oder indirekte Berechnung   Zeit, Speicher, Bandbreite oder andere   Ressourcen, die erforderlich sind, zu erreichen   ein bestimmtes Ziel. Es ist eine besondere   Fall von Engineering-Aufwand.

Overhead-Regel verweist auf die Höhe der zusätzlichen Ressourcen (Speicher, Prozessor, Zeit, etc.), dass verschiedene Programmieralgorithmen nehmen.

Zum Beispiel kann der Kopf in einen ausgewogen Binary Tree des Einsetzens könnte viel größer sein als der gleichen Einsatz in eine einfachen verkettete Liste (der Einsatz wird länger dauern, verwendet mehr Energie Verarbeitung den Baum zu balancieren, die Ergebnisse in einer längeren percieved Betriebszeit durch den Benutzer).

Für Frei einen Programmierer auf diese Systemressourcen bezieht, die von Ihrem Code verbraucht werden, wenn es auf einer Plattform zu geben auf einem bestimmten Satz von Eingangsdaten ausgeführt wird. Üblicherweise wird der Begriff im Kontext verwendet den Vergleich verschiedene Implementierungen oder mögliche Implementierungen.

Zum Beispiel könnten wir sagen, dass ein bestimmter Ansatz erhebliche CPU-Overhead entstehen könnte, während ein anderer möglicherweise mehr Speicher-Overhead möglich und noch eine andere Macht zu Netzwerk-Overhead gewichtet (und mit sich bringen eine externe Abhängigkeit, zum Beispiel).

Lassen Sie uns geben, das ein spezifisches Beispiel: Berechnen der Durchschnitt (arithmetisches Mittel) eines Satzes von Zahlen

.

Der offensichtliche Ansatz ist über die Eingänge Schleife, eine laufende Summe zu halten und eine Zählung. Wenn die letzte Zahl angetroffen wird (signalisiert durch „Ende der Datei“ EOF, oder einen Sentinel-Wert, oder einen GUI-Buttom, was auch immer), dann teilen wir einfach die Summe durch die Anzahl der Eingänge und wir sind fertig.

entstehen Dieser Ansatz fast kein Aufwand in Bezug auf CPU, Speicher oder andere Ressourcen. (Es ist eine triviale Aufgabe).

Ein weiterer möglicher Ansatz ist es, „schlürfen“ den Eingang in eine Liste. Iterierte über die Liste, um die Summe zu berechnen, dann teilen, dass durch die Anzahl der gültigen Elemente aus der Liste.

Im Vergleich könnte dieser Ansatz beliebige Mengen an Speicher-Overhead möglich.

In einer besonderen schlechten Implementierung könnten wir die Summenoperation durchführen Rekursion aber ohne Schwanz-Eliminierung. Nun, zusätzlich zu dem Speicher-Overhead für unsere Liste sind wir auch Stack Overhead-Einführung (das ist eine andere Art von Speicher und ist oft eine begrenzte Ressource als andere Formen der Erinnerung).

Noch ein weiterer (wohl absurder) Ansatz wäre, alle Eingänge zu einiger SQL-Tabelle in einem RDBMS zu posten. Dann rufen Sie einfach die SQL-Funktion SUMME auf dieser Spalte der Tabelle. Dadurch verschiebt sich unsere lokalen Speicher-Overhead auf einem anderen Server, und verursacht Netzwerk-Overhead und externe Abhängigkeiten auf unserer Ausführung. (Beachten Sie, dass der Remote-Server oder keine bestimmten Speicher-Overhead mit dieser Aufgabe verbunden hat --- es könnte alle die Werte schiebt sofort aus, um die Lagerung, zum Beispiel).

Hypothetisch könnte eine Implementierung über eine Art Cluster betrachtet (möglicherweise die Mittelung von Billionen von Werten möglich zu machen). In diesem Fall wird jede notwendige Codierung und Verteilung der Werte (Abbildung sie den Knoten aus) und die Sammlung / Zusammenstellung der Ergebnisse (Reduktion) würde als Kopf zählt.

Wir können auch über die Overhead-Kosten, die Faktoren, die außerhalb des Programmierers eigenen Code sprechen. Zum Beispiel Kompilierung von Code für 32 oder 64-Bit-Prozessoren könnten größeren Aufwand mit dir bringen als ein für eine alte 8-Bit oder 16-Bit-Architektur sehen würde. Dies könnte größeren Speicher-Overhead beinhaltet (Ausrichtungsprobleme) oder CPU-Overhead (wo die CPU gezwungen ist, Bitreihenfolge oder gebrauchte blockfrei Anweisungen anzupassen, usw.) oder beides.

Beachten Sie, dass der Speicherplatz von Ihrem Code und Bibliotheken aufgenommen, etc. ist nicht in der Regel bezeichnet als „Overhead“, sondern wird als „Fußabdruck“. Auch die Basisspeicher Ihr Programm verbraucht (ohne Rücksicht auf eine Datenmenge, dass sie die Verarbeitung) wird seine „Fußabdruck“ auch genannt wird.

Sie könnten ein Wörterbuch verwenden. Die Definition ist das gleiche. Aber um Zeit zu sparen, Overhead ist Arbeit erforderlich, um die produktive Arbeit zu tun. Zum Beispiel läuft ein Algorithmus und tut nützliche Arbeit, sondern erfordert Speicher seine Arbeit zu tun. Diese Speicherzuweisung braucht Zeit und ist nicht direkt mit der Arbeit im Zusammenhang getan, deshalb Overhead ist.

Overhead ist einfach der mehr Zeitaufwand bei der Programmausführung. Beispiel; wenn wir eine Funktion und ihre Steuerung Anruf wird weitergeleitet, wo sie definiert ist, und dann wird sein Körper ausgeführt werden, das heißt, wir stellen unsere CPU durch einen langen Prozess ausgeführt (zuerst die Steuerung an anderer Stelle in dem Speicher vorbei, und dann gab die Ausführung und dann die Steuerung wieder an die frühere Position) Hindurchleiten folglich dauert es viel Zeit, Leistung, daher Unkosten. Unsere Ziele sind diesen Aufwand zu reduzieren, indem die Inline während der Funktionsdefinition und Zeit aufrufen, die kopiert den Inhalt der Funktion an den Funktionsaufruf damit wir die Kontrolle an einen anderen Ort passieren tun sie nicht, aber unser Programm in einer Linie fortsetzen, also inline .

Sie können überprüfen, Wikipedia . Aber vor allem, wenn mehrere Aktionen oder Ressourcen verwendet. Wie, wenn Sie sind vertraut mit .NET dort können Sie Werttypen und Referenztypen haben. Referenztypen haben Speicher-Overhead, da sie mehr Speicher als Werttypen erfordern.

Ein konkretes Beispiel für Overhead ist der Unterschied zwischen einem „lokalen“ Prozeduraufruf und ein „remote“ Prozeduraufruf.

Zum Beispiel mit klassischen RPC (und vielen anderen Remote-Frameworks, wie EJB), eine Funktion oder Methodenaufruf sieht gleich zu einem Codierer, ob ihre lokalen, im Speicher Anruf oder ein verteiltes, Netzanruf.

Zum Beispiel:

service.function(param1, param2);

Ist das ein normales Verfahren oder eine Remote-Methode? Von dem, was Sie hier sehen, kann man nicht sagen.

Aber man kann sich vorstellen, dass der Unterschied in der Ausführungszeiten zwischen den beiden Anrufen dramatisch sind.

So, während die Kern Implementierung „genauso viel kosten“, die „Overhead“ beteiligt ist ganz anders.

Denken Sie über den Kopf als die Zeit, um die Fäden zu verwalten erforderlich und unter ihnen zu koordinieren. Es ist eine Last, wenn der Thread zu tun, nicht genug Aufgabe. In einem solchen Fall kommen die Overhead-Kosten über die gespeicherte Zeit durch Einfädeln mit und der Code mehr Zeit als die sequentielle man nimmt.

sein etwas anderes als die Daten selbst, dh TCP-Flags, headers, crc, fcs etc ..

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top