de.phhsnews.com


de.phhsnews.com / Warum sind Fortschrittsbalken so ungenau?

Warum sind Fortschrittsbalken so ungenau?


Auf den ersten Blick scheint es, dass die Erstellung einer genauen Schätzung der Zeit ziemlich einfach sein sollte. Schließlich kennt der Algorithmus, der den Fortschrittsbalken erzeugt, alle Aufgaben, die er vor der Zeit erledigen muss ... richtig?

Zum größten Teil ist es richtig, dass der Quellalgorithmus weiß, was er vor der Zeit tun muss. Es ist jedoch eine sehr schwierige, wenn nicht sogar nahezu unlösbare Aufgabe, die Zeit festzuhalten, die für die Ausführung jedes Schritts erforderlich ist.

Alle Aufgaben werden nicht erstellt. Gleich

Die einfachste Methode zum Implementieren einer Fortschrittsanzeige besteht in der Verwendung einer grafischen Anzeige Darstellung des Aufgabenzählers. Wo der Prozentsatz abgeschlossen ist, wird einfach als Abgeschlossene Aufgaben / Gesamtzahl der Aufgaben berechnet. Obwohl dies logisch ist, ist es wichtig, sich daran zu erinnern, dass (offensichtlich) einige Aufgaben länger dauern.

Betrachten Sie die folgenden Aufgaben eines Installationsprogramms:

  1. Erstellen einer Ordnerstruktur.
  2. Dekomprimieren und kopieren Dateien im Wert von 1 GB
  3. Erstellen von Registrierungseinträgen
  4. Erstellen von Startmenüeinträgen

In diesem Beispiel würden die Schritte 1, 3 und 4 sehr schnell abgeschlossen, während Schritt 2 einige Zeit in Anspruch nehmen würde. So würde ein Fortschrittsbalken, der an einer einfachen Zählung arbeitet, sehr schnell auf 25% springen, während Schritt 2 ein wenig stehen bleiben und dann fast sofort zu 100% springen.

Diese Art von Implementierung ist unter Fortschrittsbalken eigentlich recht üblich weil, wie oben erwähnt, es einfach zu implementieren ist. Wie Sie jedoch sehen können, unterliegt die Verarbeitung des tatsächlichen Fortschrittsanteils in Bezug auf die verbleibende Zeit unverhältnismäßigen Aufgaben.

Um dies zu umgehen, können einige Fortschrittsanzeigen Implementierungen verwenden, bei denen Schritte gewichtet werden. Beachten Sie die obigen Schritte, bei denen jedem Schritt ein relatives Gewicht zugewiesen wird:

  1. Erstellen Sie eine Ordnerstruktur. [Weight = 1]
  2. Dekomprimieren und kopieren Sie 1 GB Dateien. [Weight = 7]
  3. Erstellen Sie Registrierungseinträge. [Gewicht = 1]
  4. Erstellen von Startmenüeinträgen. [Gewicht = 1]

Bei dieser Methode bewegt sich der Fortschrittsbalken in Schritten von 10% (das Gesamtgewicht beträgt 10), wobei die Schritte 1, 3 und 4 den Balken 10% nach Abschluss und Schritt 2 durch Bewegen bewegen 70%. Diese Methode ist zwar nicht perfekt, aber eine einfache Methode, um dem Fortschrittsbalkenprozentsatz etwas mehr Genauigkeit zu verleihen.

Frühere Ergebnisse garantieren keine zukünftige Leistung

Betrachten Sie ein einfaches Beispiel, in dem Sie gebeten werden, bis 50 zu zählen Ich benutze eine Stoppuhr, um Sie zu messen. Nehmen wir an, Sie zählen in 10 Sekunden zu 25. Es wäre vernünftig anzunehmen, dass du die verbleibenden Zahlen in weiteren 10 Sekunden zählen würdest, also würde eine Fortschrittsbalke, die dies verfolgt, 50% komplett mit 10 verbleibenden Sekunden zeigen.

Sobald deine Zählung jedoch 25 erreicht, fange ich an, Tennisbälle zu werfen bei dir. Wahrscheinlich wird dies Ihren Rhythmus brechen, da Ihre Konzentration von strikt zählenden Zahlen auf Bälle ausweichen wird, die Ihnen in den Weg geworfen werden. Vorausgesetzt, Sie können weiterzählen, hat sich Ihr Tempo sicherlich etwas verlangsamt. Der Fortschrittsbalken bewegt sich also immer noch, aber in einem viel langsameren Tempo, wobei die geschätzte verbleibende Zeit entweder im Stillstand oder sogar höher liegt.

Betrachten Sie für ein praktischeres Beispiel einen Dateidownload. Sie laden gerade eine 100-MB-Datei mit einer Geschwindigkeit von 1 MB / s herunter. Dies ist sehr einfach, um die geschätzte Zeit der Fertigstellung zu bestimmen. Aber 75% des Weges dorthin, einige Netzüberlastungen und Ihre Downloadrate fällt auf 500 KB / s.

Abhängig davon, wie der Browser die verbleibende Zeit berechnet, könnte Ihre ETA sofort von 25 Sekunden auf 50 Sekunden (unter Verwendung von Present state only: verbleibende Größe / Download - Geschwindigkeit ) oder höchstwahrscheinlich verwendet der Browser einen gleitenden Durchschnittsalgorithmus, der sich an Schwankungen der Übertragungsgeschwindigkeit anpassen würde, ohne dramatische Sprünge für den Benutzer anzuzeigen.

Ein Beispiel für a Rolling-Algorithmus in Bezug auf das Herunterladen einer Datei funktioniert in etwa wie folgt:

  • Die Übertragungsgeschwindigkeit für die vorherigen 60 Sekunden wird mit dem neuesten Wert gespeichert, der den ältesten ersetzt (zB ersetzt der 61ste Wert den ersten).
  • Die effektive Übertragung Rate für den Zweck der Berechnung ist der Durchschnitt dieser Messungen.
  • Verbleibende Zeit wird wie folgt berechnet: verbleibende / effektive Download-Geschwindigkeit

In unserem obigen Szenario (der Einfachheit halber verwenden wir 1 MB = 1.000 KB):

  • 75 Sekunden nach dem Download, unsere 60 erinnerten Werte wären jeweils 1.000 KB. Die effektive Übertragungsrate beträgt 1.000 KB (60.000 KB / 60), was eine verbleibende Zeit von 25 Sekunden (25.000 KB / 1.000 KB) ergibt.
  • Mit 76 Sekunden (wobei die Übertragungsgeschwindigkeit auf 500 KB fällt), die effektive Download-Geschwindigkeit wird zu ~ 992 KB (59.500 KB / 60), was eine verbleibende Zeit von ~ 24.7 Sekunden (24.500 KB / 992 KB) ergibt.
  • Nach 77 Sekunden: Effektive Geschwindigkeit = ~ 983 KB (59.000 KB / 60), die verbleibende Zeit von ~ 24,4 Sekunden (24.000 KB / 983 KB).
  • Bei 78 Sekunden: Effektive Geschwindigkeit = 975 KB (58.500 KB / 60), die verbleibende Zeit beträgt ~ 24.1 Sekunden (23.500 KB / 975 KB).

Sie können sehen das Muster, das hier als der Sprung in der Download-Geschwindigkeit auftritt, wird langsam in den Durchschnitt integriert, der verwendet wird, um die verbleibende Zeit zu schätzen. Wenn das Dip nach dieser Methode nur 10 Sekunden dauerte und dann auf 1 MB / s zurückkehrte, ist es unwahrscheinlich, dass der Benutzer den Unterschied bemerkt (abgesehen von einem sehr kleinen Stillstand im Countdown der geschätzten Zeit) - Dies ist einfach eine Methode, um Informationen an den Endbenutzer für die eigentliche zugrunde liegende Ursache weiterzuleiten ...

Sie können nicht genau bestimmen, was nichtdeterministisch ist

Letztendlich läuft die Fortschrittsanzeige-Ungenauigkeit auf die Tatsache hinaus, dass sie versucht, a zu bestimmen Zeit für etwas, das nicht deterministisch ist. Da Computer Aufgaben sowohl bei Bedarf als auch im Hintergrund verarbeiten, ist es fast unmöglich zu wissen, welche Systemressourcen zu einem beliebigen Zeitpunkt in der Zukunft verfügbar sein werden - und es ist die Verfügbarkeit von Systemressourcen, die für die Ausführung einer Aufgabe benötigt wird.

An einem anderen Beispiel nehmen Sie an, dass Sie ein Programm-Upgrade auf einem Server ausführen, der eine ziemlich intensive Datenbankaktualisierung durchführt. Während dieses Aktualisierungsprozesses sendet ein Benutzer eine anspruchsvolle Anforderung an eine andere Datenbank, die auf diesem System ausgeführt wird. Jetzt müssen die Server-Ressourcen, speziell für die Datenbank, Anforderungen sowohl für Ihr Upgrade als auch für die vom Benutzer initiierte Abfrage verarbeiten - ein Szenario, das sich sicherlich nachteilig auf die Ausführungszeit auswirkt. Alternativ könnte ein Benutzer eine große Dateiübertragungsanforderung einleiten, die den Speicherdurchsatz besteuert, was ebenfalls die Leistung beeinträchtigen würde. Oder es könnte ein geplanter Task gestartet werden, der einen speicherintensiven Prozess ausführt. Sie erhalten die Idee.

Vielleicht eine realistischere Instanz für einen gewöhnlichen Benutzer - denken Sie daran, Windows Update oder einen Virenscan auszuführen. Beide dieser Operationen führen ressourcenintensive Vorgänge im Hintergrund aus. Als Ergebnis hängt der Fortschritt, den jeder macht, davon ab, was der Benutzer gerade macht. Wenn Sie Ihre E-Mail lesen, während diese ausgeführt wird, ist der Bedarf an Systemressourcen höchstwahrscheinlich niedrig und die Fortschrittsleiste wird sich ständig bewegen. Auf der anderen Seite, wenn Sie Grafikbearbeitung machen, wird Ihre Nachfrage nach Systemressourcen viel größer sein, was dazu führen wird, dass die Fortschrittsbalkenbewegung schizophren ist.

Insgesamt ist es einfach, dass es keine Kristallkugel gibt. Nicht einmal das System selbst weiß, zu welcher Last es in der Zukunft kommen wird.

Letztendlich ist es wirklich egal

Die Absicht des Fortschrittsbalkens ist, zu zeigen, dass tatsächlich Fortschritte gemacht werden und der jeweilige Prozess wird nicht aufgehängt. Es ist schön, wenn die Fortschrittsanzeige genau ist, aber normalerweise ist es nur ein kleiner Ärger, wenn es nicht ist. Meistens werden die Entwickler nicht viel Zeit und Mühe in Fortschrittsbalken-Algorithmen investieren, weil es, ehrlich gesagt, viel wichtigere Aufgaben gibt.

Natürlich haben Sie jedes Recht, genervt zu sein Wenn ein Fortschrittsbalken auf 99% springt, wird er sofort beendet und Sie müssen 5 Minuten auf das verbleibende ein Prozent warten. Aber wenn das jeweilige Programm insgesamt gut funktioniert, erinnere dich einfach daran, dass der Entwickler seine Prioritäten gerade hatte.


So ändern Sie schnell das erste Wort in einem Bash-Befehl:

So ändern Sie schnell das erste Wort in einem Bash-Befehl:

Wenn in Ihrem Workflow viele sich wiederholende Aktionen ausgeführt werden, ist es nie schade, nach Möglichkeiten zur Verbesserung und Rationalisierung Ihres Workflows zu suchen . Der heutige SuperUser F & A-Beitrag enthält einige hilfreiche Vorschläge für einen Leser, der seinen Arbeitsablauf verbessern möchte.

(how-to)

So setzen Sie Ihr iPhone oder iPad zurück, auch wenn es nicht startet

So setzen Sie Ihr iPhone oder iPad zurück, auch wenn es nicht startet

Sie können Ihr iPhone, iPad oder Ihren iPod touch einfach auf die werkseitigen Standardeinstellungen zurücksetzen. Wenn Sie Probleme haben - selbst wenn es nicht bootet - können Sie das gesamte iOS-Betriebssystem neu installieren. Es gibt mehrere Möglichkeiten, dies zu tun, und wir gehen sie vom einfachsten zum kompliziertesten durch.

(how-to)