Computer und Programmiersprachen sind in der Regel deterministisch und vorhersehbar. Fortschrittsbalken scheinen jedoch das Gegenteil zu sein, insbesondere wenn die Operation komplex ist. Selbst bei professionellen Produkten von Weltklasse spiegeln einige Fortschrittsbalken kaum den tatsächlichen Fortschritt einer Operation wider. Ich habe gesehen, wie sie in einem Sprung von 10% auf 90% gestiegen sind, nachdem sie 4 Stunden lang nichts getan hatten. Ich habe sogar einige Rückschritte gesehen, die darauf hindeuten, dass eine zusätzliche unerwartete Verarbeitung entdeckt wurde.
Zugegeben, es kann Datenbankoperationen, Netzwerkverarbeitung und parallele Operationen geben, aber es scheint, dass dies auf irgendeine Weise quantifiziert und ein Prozentsatz geschätzt werden könnte. Schließlich muss eine begrenzte Anzahl von Anweisungen ausgeführt werden, um eine Operation abzuschließen. Ist dies einfach eine schlechte Codierung oder gibt es einen fundamentalen Grund, warum es schwierig ist, den Fortschritt darzustellen?
quelle
Antworten:
Um die bisher allgemeineren Antworten zu ergänzen, kann ich einige Beispiele aus meinem Bereich nennen, in denen Fortschrittsbalken nicht funktionieren und warum;
Computergestützte Konstruktionsprogramme - Programme, die thermische Analysen oder Strömungsmechaniken durchführen, können mit Fortschrittsbalken im Allgemeinen schrecklich sein. Sie springen vorwärts, rückwärts, machen inkonsistente Schritte und es hat fast keinen Sinn, sie zu beobachten. Dies ist auf den iterativen Charakter dieser Arten von Simulationen und die Notwendigkeit zurückzuführen, Konvergenz zu finden. Dies lässt sich am besten nicht anhand eines Fortschrittsbalkens, sondern anhand eines Iterations-Konvergenz-Diagramms anzeigen.
Komplexe Simulationen - Ich habe ein Programm geschrieben, das eine komplexe Umgebung mit vielen miteinander verbundenen Faktoren simuliert. Es war für eine feste Zeitachse, also würde der Fortschrittsbalken genau die richtige Zeit sein? In meinem Fall ist die Simulation mit jedem neuen Zeitschritt zu lang, was bedeutet, dass der Fortschrittsbalken immer langsamer wird - nicht großartig. Ich fand eine andere Metrik für die Dauer der durchschnittlichen Simulation, basierend auf der Anzahl der Elemente in der Simulation, die näher an der Genauigkeit lag - aber nicht ideal, da die Prozessleiste manchmal nie gefüllt wurde (Simulation wurde zuvor gestoppt) oder 100% zu früh erreichte (Simulation lief) länger als erwartet).
In beiden Fällen wäre es entweder unmöglich, das Maximum für einen reinen Fortschrittsbalken vorher zu berechnen (Fall 1) oder nicht linear und daher nicht sehr nützlich (Fall 2).
quelle
Beide. Manchmal ist es nur schwer abzuschätzen, wie viel Zeit eine Operation in Anspruch nehmen wird, da Sie nicht im Voraus wissen, wie viel Arbeit erledigt werden muss. Manchmal sind es vereinfachte und ungenaue Schätzungen.
Beispiel: Ich lade vier Dateien gleichzeitig herunter. Jemand weiß, wie groß jede Datei ist, wie viel heruntergeladen wurde und wie viele Megabyte pro Sekunde für jede Datei heruntergeladen wurden. Scheint leicht vorherzusagen, wie lange es dauern wird. Ich weiß jedoch, dass nach dem Herunterladen einer Datei die anderen schneller heruntergeladen werden. Noch mehr, nachdem 3 Dateien heruntergeladen wurden. Der letzte wird viermal schneller heruntergeladen. Ich habe noch nie einen Fortschrittsbalken gesehen, der dies berücksichtigt.
Beispiel: Sie kopieren einen großen Ordner. In der Fortschrittsanzeige wird davon ausgegangen, dass Sie X Megabyte pro Sekunde kopieren, wissen, wie viele Megabyte vorhanden sind und wie schnell Sie bisher durchschnittlich waren. Das Problem ist, dass "Megabyte pro Sekunde" sehr ungenau ist - in der Praxis dauert es x Millisekunden pro Datei plus y Millisekunden pro Megabyte. Viele kleine Dateien dauern also viel länger als der Fortschrittsbalken erwartet.
Das Problem ist, dass Softwareentwickler sich vielleicht darum kümmern, aber ihre Manager nicht, solange Ihr Computer nicht abstürzt.
quelle
Ich denke, die übergeordnete Antwort ist, dass es oft zu komplex (oder unmöglich) ist, die Zeit zu berechnen, die dafür benötigt wird.
Manchmal ist es nur eine Frage der Rechenzeit, um den Arbeitsaufwand besser abzuschätzen (z. B. eine bessere Analyse der zu kopierenden Dateien oder eine komplexere Berechnung, um die Anzahl der erforderlichen Schritte besser abzuschätzen) eine Simulation abschließen).
In anderen Fällen ist es ziemlich unbestimmt. Wenn Ihr System ein neues Programm installiert, müssen häufig viele Abhängigkeiten überprüft werden. Und im Allgemeinen hat es keine Ahnung, wie lange jeder einzelne dauern wird und welche Abhängigkeiten diese wiederum benötigen könnten. Möglicherweise sind bereits alle Abhängigkeiten installiert, und es kann 30 Sekunden dauern, oder es fehlen Ihnen Dutzende, und es dauert Stunden. Es ist schwer, einen fairen Hintergrund dafür zu finden, besonders wenn jede Situation einzigartig sein wird.
Darüber hinaus können sich andere Abflüsse im System im Laufe der Zeit ändern (aufgrund dessen, was der Benutzer tut ... oder aufgrund von Hintergrund- / geplanten Prozessen).
Manchmal könnte die Schätzung verbessert werden, wenn der Programmierer etwas mehr Arbeit in sie stecken würde. Aber dann ist es eine andere Realität, dass dies wahrscheinlich nicht das Hauptanliegen der meisten Entwickler ist, verglichen mit der Förderung der tatsächlichen produktiven Aufgaben, die die Anwendung ausführen kann.
Letztendlich glaube ich, dass es im Moment oft nur eine lineare Schätzung ist - ein Blick darauf, wie viele der erforderlichen Grundaufgaben das Programm abgeschlossen hat. Es handelt sich also in der Tat um eine sehr grobe Schätzung, und Sie sollten sie im Allgemeinen als solche betrachten.
Eine gute Analogie könnte sein, wenn Sie ein Buch lesen.
Und Sie entscheiden, dass Sie eine Vorstellung davon haben möchten, wie lange es dauern wird, bis das Buch fertig ist ...
Sie können die Seitenzahl überprüfen und eine schnelle Schätzung basierend auf dem bisherigen Tempo erhalten.
Es könnte eine schlechte Schätzung sein, wenn Sie gerade mit dem Lesen begonnen haben, da Ihre Geschwindigkeit möglicherweise noch nicht typisch ist. Aber oft wäre es eine ziemlich grobe Vermutung.
Sie können das Buch auch überfliegen und sich eine ungefähre Vorstellung davon machen, wie viele Bilder es gibt und wie groß der Textabstand ist. Und dann haben Sie eine bessere Vorstellung davon, was Sie sehen.
Es kann jedoch immer noch eine schlechte Schätzung sein, wenn beispielsweise die Lesbarkeit des Textes abnimmt und möglicherweise von einer einfachen zu einer komplexen Prosa übergeht. Oder die Schätzung ist möglicherweise falsch, weil Sie keine andere Aufgabe erwartet haben, die Ihre Aufmerksamkeit ablenkt.
Sie könnten eine gute Schätzung erhalten, indem Sie einen großen Teil der Zeit verwenden, um sorgfältig zu analysieren, was Seite für Seite im Buch verbleibt, und es ebenfalls verbessern, indem Sie Ihren Kalender überprüfen und eine Liste der langfristigen Leseschritte für verschiedene Bücher führen.
Aber ist die Zeit, die dafür benötigt wird, die Verzögerung wert, nur um das Buch zu lesen?
Wir alle würden bessere Indikatoren lieben. Aber so wie es ist, werden wir wahrscheinlich mit groben Schätzungen rechnen müssen, zumindest bis Computer als Ganzes beginnen, verbesserte standardisierte Algorithmen zu erhalten und in der Lage sind, dynamische Faktoren (wie Ihre Wege) "intelligent" abzuwägen und zu antizipieren!
Und der Fortschrittsbalken dafür liegt momentan vielleicht bei 5%. Wir müssen nur sehen, wie das geht 8-)
quelle
Ich möchte der Antwort von @ gnasher729 hinzufügen, dass dies eine weitere versteckte Folge der Unentscheidbarkeit des Stoppproblems ist.
Abgesehen von der inhärenten Unvorhersehbarkeit interaktiver Berechnungen können selbst isolierte Berechnungen eine Ausführungszeit (und einen "Rhythmus") aufweisen, deren Vorhersagbarkeit mit einer allgemeinen Methode nicht erreicht werden kann.
Leider ist ein Fortschrittsbalken oft eine nutzlose Metapher. Was wären die Alternativen, könnte man fragen. Wenn der Benutzer weiß, was "unter der Haube" vor sich geht, kann das Hinzufügen einiger semantischer Informationen zur Schnittstelle eine Option sein, um zu einer Trace-Modus-ähnlichen Ausführung überzugehen. Wenn nicht, schaffen Sie eine ruhige Atmosphäre, die die Erwartungen reduziert.
Den Benutzer über das Verständnis unserer Einschränkungen zu informieren, ist eine - langfristig - dritte Option.
quelle
Fortschrittsbalken werden basierend auf der Anzahl der abgeschlossenen Unteraufgaben und nicht auf der für die Fertigstellung verstrichenen / erforderlichen Zeit gezeichnet.
Angenommen, eine Operation X hat vier verschiedene Unterschritte. Am Ende jedes Schritts erhöhen Sie den Fortschrittsbalken um 25%. Wenn die Ausführung eines Schritts länger dauert, wird wahrscheinlich das von Ihnen beschriebene Verhalten angezeigt - 1 bis 90% auf einmal und Stunden für den Rest.
Die Logik hinter der Verwendung der Anzahl von Unteraufgaben als Einheit anstelle der Zeit besteht darin, dass letztere nicht vorhersehbar ist. Selbst beim Herunterladen einer Datei kann die Verbindung unterbrochen werden, sodass die Zeit nicht als Einheit verwendet werden kann. Sie möchten lieber die Anzahl der heruntergeladenen Bytes und nicht die erforderliche Zeit als Fortschrittseinheit verwenden.
quelle