it.phhsnews.com


it.phhsnews.com / Perché le barre di avanzamento sono così imprecise?

Perché le barre di avanzamento sono così imprecise?


A prima vista, sembra che generare una stima accurata del tempo dovrebbe essere abbastanza facile. Dopo tutto, l'algoritmo che produce la barra di avanzamento conosce tutte le attività che deve svolgere prima del tempo ... giusto?

Per la maggior parte, è vero che l'algoritmo sorgente sa cosa deve fare prima del tempo. Tuttavia, definire il tempo necessario per eseguire ogni passaggio è un compito molto difficile, se non addirittura impossibile.

Tutte le attività non vengono create uguali

Il modo più semplice per implementare una barra di avanzamento è utilizzare un grafico rappresentazione del contatore di attività. Dove la percentuale completa viene semplicemente calcolata come Attività completate / Numero totale di attività . Mentre questo ha un senso logico al primo pensiero, è importante ricordare che (ovviamente) alcune attività richiedono più tempo.

Considera le seguenti attività eseguite da un installer:

  1. Crea struttura cartelle.
  2. Decomprimi e copia 1 GB di file.
  3. Crea voci di registro.
  4. Crea voci nel menu di avvio.

In questo esempio, i passaggi 1, 3 e 4 si completerebbero molto rapidamente mentre il passaggio 2 richiederebbe un po 'di tempo. Quindi una barra di avanzamento che lavora su un conteggio semplice salta al 25% molto velocemente, si blocca per un po 'mentre il passaggio 2 sta funzionando, e poi salta al 100% quasi immediatamente.

Questo tipo di implementazione è in realtà abbastanza comune tra le barre di avanzamento perché, come detto sopra, è facile da implementare. Tuttavia, come puoi vedere, è soggetto a compiti sproporzionati che distorcono la percentuale di avanzamento effettiva in relazione al tempo rimanente.

Per ovviare a ciò, alcune barre di avanzamento potrebbero utilizzare implementazioni in cui i passaggi sono ponderati. Considerare i passaggi precedenti in cui viene assegnato un peso relativo a ogni passaggio:

  1. Crea struttura di cartelle. [Peso = 1]
  2. Decomprime e copia 1 GB di file. [Peso = 7]
  3. Crea voci di registro. [Peso = 1]
  4. Crea voci del menu di avvio. [Peso = 1]

Utilizzando questo metodo, la barra di avanzamento si muoverà in incrementi del 10% (come il peso totale è 10) con i passaggi 1, 3 e 4 spostando la barra del 10% al completamento e il passaggio 2 spostandolo 70%. Sebbene certamente non perfetti, metodi come questo sono un modo semplice per aggiungere un po 'più precisione alla percentuale della barra di avanzamento.

I risultati passati non garantiscono le prestazioni future

Considera un semplice esempio di me che ti chiede di contare fino a 50 Io uso un cronometro per cronometrarti. Diciamo che conta fino a 25 in 10 secondi. Sarebbe ragionevole presumere che conti i restanti numeri in altri 10 secondi, quindi una barra di avanzamento che tiene traccia di ciò mostrerà il 50% completo con 10 secondi rimanenti.

Una volta che il tuo conteggio raggiunge i 25, tuttavia, inizio a lanciare palline da tennis a te. Probabilmente questo ti spezzerà il ritmo man mano che la tua concentrazione si è spostata dal contare rigorosamente i numeri alle palle schivate che hai gettato sulla tua strada. Supponendo che tu possa continuare a contare, il tuo ritmo ha certamente rallentato un po '. Così ora la barra di avanzamento è ancora in movimento, ma a un ritmo molto più lento con il tempo stimato rimanente o inarrestabile o in realtà salire più in alto.

Per un esempio più pratico di questo, si consideri un download di file. Attualmente stai scaricando un file da 100 MB alla velocità di 1 MB / s. Questo è molto facile da determinare il tempo stimato di completamento. Ma il 75% del modo in cui ci sono, alcuni problemi di congestione della rete e la tua velocità di download scende a 500 KB / s.

A seconda di come calcola il tempo rimanente, l'ETA potrebbe passare istantaneamente da 25 secondi a 50 secondi (usando il presente solo stato: Dimensione restante / velocità di download ) o, molto probabilmente, il browser utilizza un algoritmo medio rotante che si adatta alle fluttuazioni della velocità di trasferimento senza visualizzare salti drammatici per l'utente.

Un esempio di L'algoritmo di rolling per quanto riguarda il download di un file potrebbe funzionare in questo modo:

  • La velocità di trasferimento per i precedenti 60 secondi viene ricordata con il nuovo valore che sostituisce il più vecchio (ad esempio il valore 61st sostituisce il primo).
  • Il trasferimento effettivo il tasso ai fini del calcolo è la media di queste misurazioni
  • Il tempo rimanente è calcolato come: Dimensione Rimanente / effettiva Velocità di download

Quindi, usando il nostro scenario sopra (per semplicità, useremo 1 MB = 1.000 KB):

  • A 75 secondi nel download, i nostri 60 valori ricordati sarebbero ciascuno di 1.000 KB. La velocità di trasferimento effettiva è di 1.000 KB (60.000 KB / 60), con una durata residua di 25 secondi (25.000 KB / 1.000 KB).
  • A 76 secondi (dove la velocità di trasferimento scende a 500 KB), l'effettiva velocità di download diventa ~ 992 KB (59.500 KB / 60) che restituisce un tempo rimanente di ~ 24.7 secondi (24.500 KB / 992 KB).
  • A 77 secondi: Velocità effettiva = ~ 983 KB (59.000 KB / 60) che lascia il tempo rimanente di ~ 24,4 secondi (24000 KB / 983 KB).
  • A 78 secondi: Velocità effettiva = 975 KB (58,500 KB / 60) con tempo rimanente di ~ 24,1 secondi (23,500 KB / 975 KB).

È possibile vedere il modello che emerge qui come il calo della velocità di download viene lentamente incorporato nella media utilizzata per stimare il tempo rimanente. Con questo metodo, se il dip è durato solo 10 secondi e poi è tornato a 1 MB / s, è improbabile che l'utente rilevi la differenza (ad eccezione di uno stallo molto piccolo nel conto alla rovescia del tempo stimato).

Raggiungere i chiodini - questa è semplicemente una metodologia per inoltrare informazioni all'utente finale per l'effettiva causa sottostante ...

Non è possibile determinare accuratamente qualcosa che non è determinante

In definitiva, l'imprecisione della barra di progresso si riduce al fatto che si sta tentando di determinare un tempo per qualcosa che non è deterministico. Poiché i computer elaborano le attività sia su richiesta che in background, è quasi impossibile sapere quali risorse di sistema saranno disponibili in qualsiasi momento nel futuro - ed è la disponibilità delle risorse di sistema necessarie per completare qualsiasi attività.

Utilizzando un altro esempio, si supponga di eseguire un aggiornamento del programma su un server che esegue un aggiornamento del database abbastanza intenso. Durante questo processo di aggiornamento, un utente invia una richiesta impegnativa a un altro database in esecuzione su questo sistema. Ora le risorse del server, in particolare per il database, devono elaborare le richieste sia per l'aggiornamento che per la query avviata dall'utente - uno scenario che sarà sicuramente dannoso per i tempi di esecuzione. In alternativa, un utente può avviare una richiesta di trasferimento file di grandi dimensioni che imporrebbe il throughput dello storage, il che andrebbe a detrimento anche delle prestazioni. O potrebbe iniziare un'attività programmata che esegue un processo di memoria intensivo. Si ottiene l'idea.

Come, forse, un'istanza più realistica per un utente di tutti i giorni - si consideri l'esecuzione di Windows Update o di una scansione antivirus. Entrambe queste operazioni eseguono operazioni intensive in background. Di conseguenza, i progressi compiuti dipendono da ciò che l'utente sta facendo in quel momento. Se stai leggendo la tua e-mail mentre è in esecuzione, molto probabilmente la richiesta di risorse di sistema sarà bassa e la barra di avanzamento si muoverà in modo coerente. D'altra parte, se stai facendo un editing di grafica, la tua richiesta di risorse di sistema sarà molto più grande e il movimento della barra di avanzamento sarà schizofrenico.

Nel complesso, è semplicemente che non c'è la sfera di cristallo. Nemmeno il sistema in sé sa quale sarà il carico in futuro in qualsiasi momento.

In definitiva, in realtà non importa

L'intento della barra di progresso è, beh, indicare che il progresso viene effettivamente fatto e il rispettivo processo non è appeso. È bello quando l'indicatore di avanzamento è preciso, ma in genere è solo un fastidio minore quando non lo è. Per la maggior parte, gli sviluppatori non dedicheranno molto tempo e sforzi agli algoritmi della barra di avanzamento perché, francamente, ci sono compiti molto più importanti su cui trascorrere del tempo.

Naturalmente, hai tutto il diritto di essere infastidito quando una barra di avanzamento salta al 99% completa all'istante e quindi ti fa attendere 5 minuti per il restante 1 percento. Ma se il rispettivo programma funziona bene nel complesso, ricordati che lo sviluppatore aveva le sue priorità dritte.


Come aggiornare manualmente il tuo dispositivo Nexus con le immagini di fabbrica di Google

Come aggiornare manualmente il tuo dispositivo Nexus con le immagini di fabbrica di Google

I dispositivi Nexus di Google dovrebbero ricevere aggiornamenti tempestivi, ma la distribuzione scaglionata significa che potrebbero essere necessarie settimane prima che i dispositivi ricevano over-the- aggiornamenti di aria (OTA). Fortunatamente, c'è un modo più veloce (e geekier) per installare l'ultima versione di Android.

(how-to)

Come ottenere gli orologi Windows e Linux per visualizzare il tempo corretto e corrispondente? [Dual-Boot]

Come ottenere gli orologi Windows e Linux per visualizzare il tempo corretto e corrispondente? [Dual-Boot]

A volte quando si imposta un sistema dual-boot, le cose possono diventare un po 'strane con le impostazioni di ora e orologio, quindi come si risolve il problema? Il post di Q & A di SuperUser di oggi ha la soluzione perfetta per aiutare un lettore frustrato a risolvere i suoi problemi di orologio a doppio avvio.

(how-to)

Articoli Interessanti