Kodėl pažangos barai yra tokie netikslūs?

Turinys:

Kodėl pažangos barai yra tokie netikslūs?
Kodėl pažangos barai yra tokie netikslūs?

Video: Kodėl pažangos barai yra tokie netikslūs?

Video: Kodėl pažangos barai yra tokie netikslūs?
Video: Quick Guide to NoScript (Chrome & Firefox) - YouTube 2024, Gegužė
Anonim
Iš pradžių maniau, atrodo, kad tikslus laiko apskaičiavimas turėtų būti gana lengvas. Galų gale, pažangų juostos generavimo algoritmas žino visas užduotis, kurias reikia atlikti anksčiau laiko … tiesa?
Iš pradžių maniau, atrodo, kad tikslus laiko apskaičiavimas turėtų būti gana lengvas. Galų gale, pažangų juostos generavimo algoritmas žino visas užduotis, kurias reikia atlikti anksčiau laiko … tiesa?

Iš esmės tiesa, kad šaltinio algoritmas žino, ką reikia padaryti anksčiau laiko. Tačiau pritraukiant laiko, kurį reikės atlikti kiekvienam žingsniui, yra labai sunku, jei ne beveik neįmanoma.

Visos užduotys nėra lygios

Paprasčiausias būdas įgyvendinti pažangos juostą - naudoti užduočių skaitiklio grafinį vaizdą. Kai procentas yra visiškai apskaičiuojamas kaip Užbaigtos užduotys / bendras užduočių skaičius. Nors tai daro logiška pirmosios minties prasmę, svarbu prisiminti, kad (žinoma) kai kurias užduotis užtruks ilgiau.

Apsvarstykite šias montuotojo atliktas užduotis:

  1. Sukurkite aplanko struktūrą.
  2. Išspausti ir kopijuoti 1 GB vertes failų.
  3. Sukurti registro įrašus.
  4. Sukurkite pradžios meniu įrašus.

Šiame pavyzdyje 1, 3 ir 4 veiksmai baigsis labai greitai, o 2 veiksmas užtruks šiek tiek laiko. Taigi pažangos juosta, veikianti paprastame skaičiavime, greitai pakils iki 25%, šiek tiek sumažės, o 2 veiksmas dirba, tada iškart peršokti iki 100%.

Šio tipo įgyvendinimas iš tikrųjų yra gana įprastas tarp pažangos juostų, nes, kaip minėta pirmiau, jį lengva įgyvendinti. Tačiau, kaip matote, jai kyla neproporcingų užduočių faktinis progreso procentas, nes jis susijęs su likusiu laikotarpiu.

Tam, kad išspręstumėte tai, kai kuriuose pažangos juostose gali būti naudojami įdiegimai, kuriuose pakoreguojami veiksmai. Apsvarstykite pirmiau pateiktus veiksmus, kur kiekvienam žingsniui priskiriamas santykinis svoris:

  1. Sukurkite aplanko struktūrą. [Svoris = 1]
  2. Išspausti ir kopijuoti 1 GB vertes failų. [Svoris = 7]
  3. Sukurti registro įrašus. [Svoris = 1]
  4. Sukurkite pradžios meniu įrašus. [Svoris = 1]

Naudodamas šį metodą, pažangų juosta 10% žingsniais (kaip bendras svoris yra 10) žingsnis po 1, 3 ir 4 etapais, o 10 laipsnių judėjimas baigiasi, o 2 žingsnis juda 70%. Nors tikrai nėra tobulas, tokie metodai yra paprastas būdas pridėti truputį daugiau tikslumo į progreso juostos procentą.

Ankstesni rezultatai negarantuoja ateities rezultatų

Apsvarstykite paprastą mano pavyzdį, kuriame prašoma, kad jūs suskaičiuotumėte iki 50, kol aš naudoju chronometrą. Tarkime, kad skaičiuojate iki 25 po 10 sekundžių. Būtų pagrįsta manyti, kad likusius skaičius bus skaičiuojamos dar 10 sekundžių, taigi pažangos juostos stebėjimas tai parodys 50%, likus 10 sekundžių.
Apsvarstykite paprastą mano pavyzdį, kuriame prašoma, kad jūs suskaičiuotumėte iki 50, kol aš naudoju chronometrą. Tarkime, kad skaičiuojate iki 25 po 10 sekundžių. Būtų pagrįsta manyti, kad likusius skaičius bus skaičiuojamos dar 10 sekundžių, taigi pažangos juostos stebėjimas tai parodys 50%, likus 10 sekundžių.

Tačiau, kai jūsų skaičius siekia 25, aš pradedu mesti teniso kamuoliukus. Tikriausiai tai sutrikdys jūsų ritmą, nes jūsų koncentracija pereis nuo griežto skaičiavimo skaičiaus iki vengiančių kamuoliukų, išmestų jūsų kelią. Darant prielaidą, kad galite tęsti skaičiavimą, jūsų tempas beveik sulėtėjo. Taigi dabar pažangos juostos vis dar juda, tačiau daug lėčiau nei prognozuojamas laikas, likęs neišblokuotas ar faktiškai aukštėjantis.

Norėdami gauti daugiau praktinio pavyzdžio, apsvarstykite failo atsisiuntimą. Šiuo metu atsisiųsite 100 MB failą 1 MB / s greičiu. Tai labai lengva nustatyti apskaičiuotą užbaigimo laiką. Tačiau 75% ten esama, kai kurie tinklo perkrovos paspaudimai ir jūsų atsisiuntimo greitis sumažėja iki 500 KB / s.

Priklausomai nuo to, kaip naršyklė apskaičiuoja likusį laiką, jūsų ETA gali iš karto pereiti nuo 25 sekundžių iki 50 sekundžių (naudojant tik esamą būseną: Dydis lieka / Atsisiųsti greitis) arba, greičiausiai, naršyklė naudoja sukimąjo vidurkio algoritmą, kuris prisiderintų prie perdavimo spartos svyravimų, nerodydamas didelių šuolių į naudotoją.

Srauto algoritmo pavyzdys, susijęs su failo parsisiuntimu, gali būti toks:

  • Perdavimo greitis per pastaruosius 60 sekundžių prisimenamas naujausia, pakeičiančia seniausią (pvz., 61 vertė pakeičia pirmąją).
  • Apskaičiuojant faktinę perdavimo spartą, yra šių matavimų vidurkis.
  • Likęs laikas skaičiuojamas taip: Dydis lieka / efektyvus atsisiuntimo greitis

Taigi, naudodami anksčiau pateiktą scenarijų (paprastumo dėlei naudosime 1 MB = 1,000 KB):

  • Po 75 sekundžių į atsisiuntimą 60 mūsų prisimenamų verčių būtų 1 000 KB. Veiksminga perdavimo sparta yra 1 000 KB (60 000 KB / 60), o tai reiškia 25 sekundes (25 000 KB / 1000 KB).
  • Po 76 sekundžių (kai perkėlimo greitis nukrenta iki 500 KB), veiksmingas atsisiuntimo greitis tampa ~ 992 KB (59 500 KB / 60), o tai reiškia, kad laikas yra ~ 24,7 sekundės (24 500 KB / 992 KB).
  • Po 77 sekundžių: efektyvus greitis = ~ 983 KB (59 000 KB / 60), liekamasis laikas ~ 24,4 sekundės (24 000 KB / 983 KB).
  • Po 78 sekundžių: efektyvus greitis = 975 KB (58 500 KB / 60), liekamasis laikas ~ 24,1 sekundės (23 500 KB / 975 KB).

Čia galite pamatyti modelį, nes atsisiųstuvo greitis yra lėtai įtraukiamas į vidurkį, kuris naudojamas norint įvertinti likusį laiką. Pagal šį metodą, jei nuolydis truko tik 10 sekundžių, o tada grįžo į 1 MB / s, vartotojas vargu ar pastebės skirtumą (išskyrus labai mažą skaičių, numatytą laiko grįžtamojo pokalbio metu).

Pasirengimas žalvarinėms trinkelėms - tai tiesiog metodika informacijos perdavimui galutiniam vartotojui dėl faktinės priežasties …

Jūs negalite tiksliai nustatyti kažkas, kuris nėra nesterminis

Galų gale, pažangos juostos netikslumas priklauso nuo to, kad jis bando nustatyti tam tikrą laiką, kuris nėra nesterminis. Kadangi kompiuteriai apdoroja užduotys tiek pagal pareikalavimą, tiek į foną, beveik neįmanoma žinoti, kokie sistemos ištekliai bus prieinami bet kuriuo ateities tašku - tai yra sistemos išteklių, kurie reikalingi bet kokiai užduočiai atlikti, prieinamumas.

Naudodamiesi kitu pavyzdžiu, tarkime, jūs naudojate programos atnaujinimą serveryje, kuris atlieka gana intensyvų duomenų bazės atnaujinimą. Šio atnaujinimo proceso metu vartotojas siunčia reikalaujantį užklausą kitai šios sistemos naudojamai duomenų bazei. Dabar serverio ištekliai, ypač duomenų bazės, turi apdoroti tiek naujinimo, tiek naudotojo inicijuotos užklausos užklausas, - tai scenarijus, kuris neabejotinai kenkia vykdymo trukmei. Be to, vartotojas gali inicijuoti didelį failų perdavimo užklausą, pagal kurią būtų galima apmokestinti saugojimo pralaidumą, kuri taip pat sumažintų našumą. Arba gali įvykti suplanuota užduotis, atliekanti atminties intensyvų procesą. Jūs gaunate idėją.

Kaip galbūt realesnis pavyzdys kasdieniniam vartotojui - apsvarstykite "Windows" naujinimo arba virusų nuskaitymo funkciją. Abi šios operacijos atlieka intensyvias operacijas fone. Dėl to kiekvienos iš jų padaryta pažanga priklauso nuo to, ką vartotojas tuo metu daro. Jei skaitysite el. Laišką, kol tai bus vykdomas, greičiausiai sistemos išteklių paklausa bus maža, o pažangos juosta bus nuosekliai perkelta. Kita vertus, jei atliksite grafikos redagavimą, tada jūsų sistemos išteklių poreikis bus daug didesnis, todėl pažangos juostos judėjimas bus šizofreniškas.

Apskritai paprasta, kad nėra kristalų kamuoliuko. Net pati sistema nežino, kokia apkrova bus bet kokioje ateityje.

Galiausiai tai tikrai nesvarbu

Progresavimo juostos tikslas yra gerai parodyti, kad pažanga iš tiesų daroma ir atitinkamas procesas nėra pakabintas. Tai malonu, kai pažangos rodiklis yra tikslus, tačiau paprastai tai yra tik nedidelis erzina, kai to nėra. Daugeliu atvejų kūrėjai nesiruošia skirti daug laiko ir pastangų į pažangų juostos algoritmus, nes, tiesą sakant, yra daug svarbesnių užduočių praleisti laiką.

Žinoma, jūs turite visokeriopai sujaudintą, kai progreso juosta iš karto iššoko iki 99%, o likusį procentą paliekate palaukti 5 minutes. Bet jei atitinkama programa veikia gerai, tiesiog primenate, kad kūrėjas turi savo prioritetus tiesiai.

Rekomenduojamas: