nl.phhsnews.com


nl.phhsnews.com / Waarom zijn voortgangsbalken zo onnauwkeurig?

Waarom zijn voortgangsbalken zo onnauwkeurig?


Bij het eerste idee lijkt het erop dat het genereren van een nauwkeurige schatting van de tijd vrij eenvoudig moet zijn. Het algoritme dat de voortgangsbalk produceert, kent immers alle taken die het van tevoren moet doen ... toch?

Het is voor het grootste deel waar dat het bronalgoritme wel weet wat het van tevoren moet doen. Het vastzetten van de tijd die nodig is om elke stap uit te voeren, is echter een zeer moeilijke, zo niet vrijwel onmogelijke taak.

Alle taken worden niet gelijk gemaakt

De eenvoudigste manier om een ​​voortgangsbalk te implementeren, is door een grafische weergave te gebruiken. weergave van taakteller. Waar het percentage voltooid is, wordt eenvoudig berekend als Voltooide taken / Totaal aantal taken . Hoewel dit logisch gezien het eerste idee is, is het belangrijk om te onthouden dat (uiteraard) sommige taken langer duren om te voltooien.

Overweeg de volgende taken uit te voeren door een installatieprogramma:

  1. Maak een mappenstructuur.
  2. Decomprimeren en kopiëren 1 GB aan bestanden.
  3. Maak registervermeldingen.
  4. Maak startmenu-items.

In dit voorbeeld zouden stappen 1, 3 en 4 zeer snel voltooien terwijl stap 2 enige tijd zou duren. Dus een voortgangsbalk die werkt aan een eenvoudige telling zou snel naar 25% springen, een tijdje stil blijven staan ​​terwijl stap 2 werkt, en dan onmiddellijk naar 100% springen.

Dit type implementatie is eigenlijk vrij gebruikelijk onder voortgangsbalken omdat, zoals hierboven vermeld, het eenvoudig te implementeren is. Zoals u ziet, is het echter onderhevig aan onevenredige taken die het werkelijke voortgangspercentage scheeftrekken als het betrekking heeft op resterende tijd.

Om dit te omzeilen, kunnen sommige voortgangsbalken implementaties gebruiken waarbij stappen worden gewogen. Overweeg de bovenstaande stappen waarbij een relatief gewicht wordt toegewezen aan elke stap:

  1. Maak een mapstructuur. [Gewicht = 1]
  2. Decomprimeer en kopieer 1 GB aan bestanden. [Gewicht = 7]
  3. Registervermeldingen maken. [Gewicht = 1]
  4. Maak startmenu-items. [Gewicht = 1]

Met deze methode beweegt de voortgangsbalk in stappen van 10% (als het totale gewicht 10 is) met stappen 1, 3 en 4, waarbij de balk 10% wordt verplaatst bij voltooiing en stap 2 wordt verplaatst 70%. Hoewel dit zeker niet perfect is, zijn methoden zoals deze een eenvoudige manier om een ​​beetje meer nauwkeurigheid toe te voegen aan het voortgangsbalkpercentage.

Resultaten uit het verleden garanderen geen toekomstige prestaties

Overweeg een eenvoudig voorbeeld van mijn vraag om tot 50 te tellen terwijl Ik gebruik een stopwatch om je te timen. Laten we zeggen dat je tot 25 in 10 seconden telt. Het zou redelijk zijn om aan te nemen dat je de resterende nummers in nog eens 10 seconden zult tellen, dus een voortgangsbalk die dit bijhoudt zou 50% compleet zijn en 10 seconden resteren.

Zodra je telling 25 wordt, begin ik met het gooien van tennisballen bij je. Waarschijnlijk zal dit je ritme onderbreken omdat je concentratie is verschoven van strikt getelde getallen naar ontwijkende ballen die je hebt gegooid. Ervan uitgaande dat je door kunt gaan met tellen, is je tempo zeker een beetje vertraagd. Dus nu is de voortgangsbalk nog steeds in beweging, maar in een veel langzamer tempo waarbij de geschatte tijd stilstaat of zelfs hoger gaat.

Overweeg een bestanddownload voor een meer praktisch voorbeeld hiervan. U downloadt momenteel een bestand van 100 MB tegen een snelheid van 1 MB / s. Dit is heel eenvoudig om de geschatte tijd van voltooiing te bepalen. Maar 75% van de weg ernaartoe, enkele netwerkcongestie treft en uw downloadsnelheid daalt naar 500 KB / s.

Afhankelijk van hoe de browser de resterende tijd berekent, kan uw ETA onmiddellijk gaan van 25 seconden tot 50 seconden (met behulp van huidige alleen status: Resterende grootte / downloadsnelheid ) of, hoogstwaarschijnlijk, de browser gebruikt een voortschrijdend gemiddeld algoritme dat zich aanpast voor fluctuaties in overdrachtssnelheid zonder dramatische sprongen naar de gebruiker te tonen.

Een voorbeeld van een rolling algoritme met betrekking tot het downloaden van een bestand kan ongeveer zo werken:

  • De overdrachtssnelheid van de vorige 60 seconden wordt onthouden met de nieuwste waarde die de oudste waarde vervangt (bijv. de 61ste waarde vervangt de eerste).
  • De effectieve overdracht snelheid voor het doel van berekening is het gemiddelde van deze metingen.
  • Resterende tijd wordt berekend als: Grootte resterend / effectief Downloadsnelheid

Dus gebruikmakend van ons scenario hierboven (omwille van de eenvoud zullen we 1 MB = 1.000 KB gebruiken):

  • Na 75 seconden in de download, onze 60 onthouden waarden zouden elk 1.000 KB zijn. De effectieve overdrachtssnelheid is 1.000 KB (60.000 KB / 60), wat resulteert in een resterende tijd van 25 seconden (25.000 KB / 1.000 KB).
  • Na 76 seconden (waarbij de overdrachtssnelheid daalt tot 500 KB), is de effectieve downloadsnelheid wordt ~ 992 KB (59.500 KB / 60), wat een resterende tijd van ~ 24,7 seconden (24.500 KB / 992 KB) oplevert.
  • Na 77 seconden: effectieve snelheid = ~ 983 KB (59.000 KB / 60) levert resterende tijd op ~ 24,4 seconden (24.000 KB / 983 KB).
  • Op 78 seconden: effectieve snelheid = 975 KB (58.500 KB / 60) levert een resterende tijd van ~ 24,1 seconden op (23.500 KB / 975 KB).

U kunt zien het patroon dat hier opduikt, aangezien de daling van de downloadsnelheid langzaam wordt opgenomen in het gemiddelde dat wordt gebruikt om de resterende tijd te schatten. Onder deze methode, als de dip slechts 10 seconden heeft geduurd en vervolgens is teruggekeerd naar 1 MB / s, is het onwaarschijnlijk dat de gebruiker het verschil opmerkt (behalve voor een heel kleine stal in de geschatte afteltijd).

Naar de koperen tacks gaan - dit is simpelweg een methodiek voor het doorgeven van informatie aan de eindgebruiker voor de feitelijke onderliggende oorzaak ...

U kunt niet nauwkeurig bepalen wat niet-deterministisch is

Uiteindelijk komt de onnauwkeurigheid van de voortgangsbalk neer op het feit dat het probeert een tijd voor iets dat niet-deterministisch is. Omdat computers taken zowel op aanvraag als op de achtergrond verwerken, is het bijna onmogelijk om te weten welke systeembronnen er op enig moment in de toekomst beschikbaar zullen zijn - en het is de beschikbaarheid van systeembronnen die nodig is om een ​​taak te voltooien.

Veronderstel dat u een programma-upgrade uitvoert op een server die een vrij intensieve database-update uitvoert. Tijdens dit updateproces stuurt een gebruiker een veeleisend verzoek naar een andere database die op dit systeem wordt uitgevoerd. Nu moeten de serverbronnen, in het bijzonder voor de database, verzoeken verwerken voor zowel uw upgrade als de door de gebruiker gestarte query - een scenario dat zeker de uitvoeringstijd nadelig zal beïnvloeden. Als alternatief zou een gebruiker een groot bestandoverdrachtverzoek kunnen initiëren dat de opslagdoorvoer zou belasten, hetgeen eveneens zou afbreuk doen aan de prestatie. Of een geplande taak kan beginnen die een geheugenintensief proces uitvoert. U krijgt het idee.

Misschien een realistischer voorbeeld voor een dagelijkse gebruiker - overweeg om Windows Update of een virusscan uit te voeren. Bij beide bewerkingen worden op de achtergrond resource-intensieve bewerkingen uitgevoerd. Dientengevolge is de voortgang die elk maakt afhankelijk van wat de gebruiker op dat moment doet. Als u uw e-mail leest terwijl deze wordt uitgevoerd, zal de vraag naar systeembronnen waarschijnlijk laag zijn en zal de voortgangsbalk consistent worden verplaatst. Aan de andere kant, als je bezig bent met grafische bewerking, dan zal je vraag naar systeembronnen veel groter zijn, waardoor de beweging van de voortgangsbalk schizofreen wordt.

Over het algemeen is het eenvoudig dat er geen kristallen bol is. Zelfs het systeem zelf weet niet welke belasting het op enig moment in de toekomst zal ondergaan.

Uiteindelijk doet het er echt niet toe

De bedoeling van de voortgangsbalk is om wel aan te geven dat er inderdaad vooruitgang wordt geboekt en het respectieve proces is niet opgehangen. Het is leuk als de voortgangsindicator klopt, maar meestal is het slechts een kleine ergernis als dat niet zo is. Voor het grootste deel zullen ontwikkelaars niet veel tijd en moeite steken in de algoritmen van de voortgangsbalk, omdat er eerlijk gezegd veel belangrijker taken zijn om tijd aan te besteden.

Natuurlijk heb je het volste recht geïrriteerd te zijn wanneer een voortgangsbalk onmiddellijk naar 99% springt en u vervolgens 5 minuten wacht voor de resterende één procent. Maar als het betreffende programma over het algemeen goed werkt, moet u er alleen aan denken dat de ontwikkelaar zijn prioriteiten recht had.


Bloatware verbannen: Windows 10 elimineert de noodzaak om ooit Windows opnieuw te installeren op nieuwe pc's

Bloatware verbannen: Windows 10 elimineert de noodzaak om ooit Windows opnieuw te installeren op nieuwe pc's

Geeks Windows vaak direct opnieuw installeren op hun nieuwe pc's om een ​​volledig schoon systeem te krijgen. Dankzij een wijziging in Windows 10 kunt u een nieuw exemplaar van Windows op elke pc krijgen zonder een ISO-bestand te downloaden en Windows opnieuw te installeren. Microsoft verandert de manier waarop vernieuwen en opnieuw instellen werkt in Windows 10.

(how-to)

Meldingen op uw Apple Watch stilzetten, beheren en verbergen

Meldingen op uw Apple Watch stilzetten, beheren en verbergen

Een van de belangrijkste aanleidingen van een smartwatch is eenvoudig polsgerelateerde meldingen, maar dingen kunnen enigszins uit de hand lopen. Lees verder terwijl we u laten zien hoe u uw meldingen van Apple Watch naar wens kunt aanpassen. Hoe kunnen meldingen van Apple Watch worden gebruikt? Voordat we uw feitelijke Apple Watch-meldingen bespreken, laten we u eerst een kort overzicht geven van de manier waarop de Meldingen functie standaard, dus je hebt een goed begrip van de meldingen en wat je wel of niet wilt wijzigen.

(how-to)