Zašto su tijekovi za napredak tako netočni?

Sadržaj:

Zašto su tijekovi za napredak tako netočni?
Zašto su tijekovi za napredak tako netočni?
Anonim
Na prvi pogled, čini se da bi stvaranje točne procjene vremena trebalo biti prilično jednostavno. Uostalom, algoritam koji proizvodi bar napredak zna sve zadatke koje treba učiniti prije vremena … zar ne?
Na prvi pogled, čini se da bi stvaranje točne procjene vremena trebalo biti prilično jednostavno. Uostalom, algoritam koji proizvodi bar napredak zna sve zadatke koje treba učiniti prije vremena … zar ne?

U većini slučajeva, istina je da izvorni algoritam zna što treba učiniti prije vremena. Međutim, odlaganje vremena koje će trebati za izvođenje svakog koraka je vrlo težak, ako ne i praktički nemoguć zadatak.

Svi zadaci nisu stvoreni jednaki

Najjednostavniji način implementacije trake napretka je korištenje grafičkog prikaza brojača zadataka. Tamo gdje se postotak potpuna jednostavno izračunava kao Završene zadatke / ukupan broj zadataka, Iako ovo prvo razmišljanje čini logičnim smislom, važno je zapamtiti da (očito) neki zadaci traju duže.

Razmotrite sljedeće zadatke koje izvršava instalacijski program:

  1. Stvorite strukturu mapa.
  2. Dekomprimirati i kopirati 1 GB vrijedne datoteke.
  3. Napravite stavke registra.
  4. Stvorite stavke početnog izbornika.

U ovom primjeru, koraci 1, 3 i 4 završili bi vrlo brzo dok bi korak 2 trebao malo vremena. Dakle, traka napretka koji rade na jednostavnom broju skočit će na 25% vrlo brzo, zaustaviti se malo, dok korak 2 radi, a zatim skočiti na 100% gotovo odmah.

Ova vrsta implementacije je zapravo prilično česta među trakama napretka jer je, kao što je već rečeno, lako implementirati. Međutim, kao što vidite, podložno je nerazmjernim zadacima koji su zaostajali stvaran postotak napretka jer se odnosi na preostalo vrijeme.

Da bi se ovo riješilo, neki se gumbi za napredovanje mogu koristiti implementacijama u kojima su koraci ponderirani. Razmislite o gore navedenim koracima gdje je dodijeljena relativna težina za svaki korak:

  1. Stvorite strukturu mapa. [Masa = 1]
  2. Dekomprimirati i kopirati 1 GB vrijedne datoteke. [Masa = 7]
  3. Napravite stavke registra. [Masa = 1]
  4. Stvorite stavke početnog izbornika. [Masa = 1]

Koristeći ovu metodu, traka za napredovanje kretala se u koracima od 10% (kao ukupna težina 10) s koracima 1, 3 i 4 pomicanja trake 10% po završetku, a korak 2 pomiče 70%. Iako zasigurno nije savršen, takve metode su jednostavan način da dodate malo više točnosti na postotak stupnja napredovanja.

Prošli rezultati ne jamče budućnost

Razmislite o jednostavnom primjeru koji traži od vas da računate na 50 dok koristim štopericu na vrijeme. Pretpostavimo da računate na 25 u 10 sekundi. Bilo bi razumno pretpostaviti da ćete prebrojati preostale brojeve u dodatnih 10 sekundi, tako da će praćenje trake napretka pokazati 50% potpune s preostalim 10 sekundi.
Razmislite o jednostavnom primjeru koji traži od vas da računate na 50 dok koristim štopericu na vrijeme. Pretpostavimo da računate na 25 u 10 sekundi. Bilo bi razumno pretpostaviti da ćete prebrojati preostale brojeve u dodatnih 10 sekundi, tako da će praćenje trake napretka pokazati 50% potpune s preostalim 10 sekundi.

Jednom kada vam broj dosegne 25, počinjem bacati teniske loptice na vas. Vjerojatno ćete ovo prekinuti ritam jer se koncentracija prebacuje iz strogo brojanih brojeva na izbjegavanje kugli koje su vam bačene. Pretpostavljajući da ste u mogućnosti nastaviti brojanje, vaš tempo je zasigurno usporio. Sada se traka napretka još uvijek kreće, ali u znatno sporije vrijeme s preostalim procijenjenim vremenom ostaje ili se uspravi.

Za praktičniji primjer toga, razmislite o preuzimanju datoteka. Trenutno preuzimate datoteku od 100 MB brzinom od 1 MB / s. Ovo je vrlo lako odrediti procijenjeno vrijeme dovršetka. No, 75% načina na koji se tamo pojavio, neki mrežni zastoj pogoduje i brzina preuzimanja pada na 500 KB / s.

Ovisno o tome kako preglednik izračunava preostalo vrijeme, vaš ETA mogao bi odmah ići od 25 sekundi do 50 sekundi (samo u trenutačnom stanju: Preostala veličina / Brzina preuzimanja) ili, najvjerojatnije, preglednik koristi prosječni algoritam koji se podešava za fluktuacije brzine prijenosa bez prikazivanja dramatičnih skokova korisnika.

Primjer algoritma za valjanje s obzirom na preuzimanje datoteke može raditi nešto slično:

  • Brzina prijenosa za prethodnih 60 sekundi zapamćena je najnovijom vrijednošću koja zamjenjuje najstariju (npr. 61. vrijednost zamjenjuje prvu).
  • Učinkovita stopa prijenosa u svrhu izračuna je prosjek ovih mjerenja.
  • Preostalo vrijeme računa se kao: Preostala veličina / učinkovita brzina preuzimanja

Zato upotrijebite gore navedeni scenarij (za jednostavnost koristit ćemo 1 MB = 1000 KB):

  • U 75 sekundi u preuzimanju, naše 60 sjećanja vrijednosti bi bile svaka od 1000 KB. Učinkovita brzina prijenosa je 1000 KB (60.000 KB / 60) što daje preostalo vrijeme od 25 sekundi (25.000 KB / 1000 KB).
  • Kod 76 sekundi (gdje brzina prijenosa pada na 500 KB), učinkovita brzina preuzimanja postaje ~ 992 KB (59.500 KB / 60), što daje preostalo vrijeme od ~ 24.7 sekundi (24.500 KB / 992 KB).
  • U roku od 77 sekundi: Učinkovita brzina = ~ 983 KB (59.000 KB / 60) čime je preostalo vrijeme od ~ 24.4 sekunde (24.000 KB / 983 KB).
  • U 78 sekundi: Učinkovita brzina = 975 KB (58.500 KB / 60) čime je preostalo vrijeme ~ 24.1 sekunde (23.500 KB / 975 KB).

Vidjet ćete uzorak koji se pojavljuje ovdje, jer je usporavanje brzine preuzimanja polako uključeno u prosjek koji se koristi za procjenu preostalog vremena. Pod ovom metodom, ako je umočen samo trajao 10 sekundi, a zatim se vraća na 1 MB / s, korisnik vjerojatno neće primijetiti razliku (osim vrlo malo zastoja u procijenjenom odbrojavanju vremena).

Doći do brass metode - to je jednostavno metodologija za prenošenje informacija krajnjem korisniku za stvarni temeljni uzrok …

Ne možete točno utvrditi nešto što je neodređeno

Naposljetku, nepreciznost naprednog stupnja svodi se na činjenicu da pokušava odrediti vrijeme za nešto što je neodređeno. Budući da računala obrađuju zadatke i na zahtjev iu pozadini, gotovo je nemoguće znati koji će resursi sustava biti dostupni u bilo kojem trenutku u budućnosti - a to je dostupnost resursa sustava potrebnih za dovršavanje bilo kojeg zadatka.

Pomoću drugog primjera, pretpostavimo da na poslužitelju imate nadogradnju programa koja obavlja prilično intenzivno ažuriranje baze podataka. Tijekom tog procesa ažuriranja, korisnik zatim šalje zahtjevan zahtjev drugoj bazi koja se izvodi na ovom sustavu. Sada resursi poslužitelja, posebno za bazu podataka, moraju obraditi zahtjeve za vašu nadogradnju, kao i korisnik pokrenuo upit - scenarij koji će sigurno biti uzajamno štetan za vrijeme izvršenja. Alternativno, korisnik može pokrenuti veliki zahtjev za prijenos datoteka koji bi porezao propusnost pohrane koja bi također mogla narušiti izvedbu. Ili bi mogao pokrenuti zakazani zadatak koji obavlja proces s intenzivnim memorijom. Dobivate ideju.

Kao, možda, realističniji primjer svakodnevnog korisnika - razmislite o pokretanju sustava Windows Update ili skeniranju virusa. Obje ove operacije izvode resurse intenzivne operacije u pozadini. Kao rezultat toga, svaki napredak ovisi o tome što korisnik trenutno radi. Ako čitate vašu e-poštu dok se to pokreće, najvjerojatnije će potražnja na resursima sustava biti niska i traka napretka će se kretati dosljedno. S druge strane, ako radite s grafičkim uređivanjem, vaša potražnja za resursima sustava bit će mnogo veća što će uzrokovati shizofrenu kretanje trake napretka.

Sve u svemu, jednostavno je da nema kristalne kugle. Čak niti sam sustav ne zna što će biti opterećeno u bilo kojem trenutku u budućnosti.

Naposljetku, to stvarno ne znači

Namjera trake napretka je, dobro, ukazati na to da se napredak doista stvara, a odgovarajući proces nije obješen. Lijepo je kada je indikator napretka točan, ali obično je to samo manji smetnji kad to nije. U većini slučajeva, programeri neće uložiti puno vremena i napora u napredne algoritme bar jer, iskreno, postoje mnogo važnije zadaće da provedu vrijeme.

Naravno, imate pravo na neugodno vrijeme kada se traka napretka skoči na 99%, a zatim čeka 5 minuta za preostalih jedan posto. No, ako program djeluje dobro, samo se podsjetite da je programer imao svoje prioritete ravno.

Preporučeni: