phhsnews.com


phhsnews.com / Pourquoi les barres de progression sont-elles si inexactes?

Pourquoi les barres de progression sont-elles si inexactes?


À première vue, il semble que générer une estimation précise du temps devrait être assez facile. Après tout, l'algorithme produisant la barre de progression connaît toutes les tâches qu'il doit faire à l'avance ... pas vrai?

Pour la plupart, il est vrai que l'algorithme source sait ce qu'il doit faire à l'avance. Cependant, l'épinglage du temps nécessaire pour effectuer chaque étape est une tâche très difficile, voire impossible.

Toutes les tâches ne sont pas créées Equal

La façon la plus simple d'implémenter une barre de progression est d'utiliser un graphique. représentation du compteur de tâches. Où le pourcentage terminé est simplement calculé comme Tâches terminées / Nombre total de tâches . Bien que cela soit cohérent à première vue, il est important de se rappeler que certaines tâches prennent plus de temps à se terminer.

Considérez les tâches suivantes effectuées par un installateur:

  1. Créer une structure de dossier
  2. Décompresser et copier 1 Go de fichiers.
  3. Créer des entrées de registre
  4. Créer des entrées dans le menu Démarrer

Dans cet exemple, les étapes 1, 3 et 4 se termineraient très rapidement alors que l'étape 2 prendrait du temps. Ainsi, une barre de progression fonctionnant sur un simple comptage passerait rapidement à 25%, stagnerait un peu pendant que l'étape 2 fonctionnerait, puis passerait à 100% presque immédiatement.

Ce type d'implémentation est assez courant parmi les barres de progression parce que, comme indiqué ci-dessus, il est facile à mettre en œuvre. Cependant, comme vous pouvez le voir, il est sujet à des tâches disproportionnées faussant le pourcentage de progression réel par rapport au temps restant.

Pour contourner ce problème, certaines barres de progression peuvent utiliser des implémentations pondérées. Considérons les étapes ci-dessus où un poids relatif est attribué à chaque étape:

  1. Créer une structure de dossier. [Poids = 1]
  2. Décompresse et copie 1 Go de fichiers. [Weight = 7]
  3. Créer des entrées de registre. [Weight = 1]
  4. Créer les entrées du menu Démarrer. [Weight = 1]

En utilisant cette méthode, la barre de progression se déplacerait par incréments de 10% (le poids total étant de 10) avec les étapes 1, 3 et 4 déplaçant la barre de 10% à la fin et l'étape 2 70%. Bien qu'elles ne soient pas parfaites, ces méthodes sont un moyen simple d'ajouter un peu plus de précision au pourcentage de la barre de progression.

Les résultats passés ne garantissent pas les performances futures

Considérez un exemple simple de moi demandant de compter jusqu'à 50 J'utilise un chronomètre pour vous chronométrer. Disons que vous comptez 25 en 10 secondes. Il serait raisonnable de supposer que vous compterez les nombres restants dans les 10 secondes suivantes, donc une barre de progression suivrait ce résultat à 50% avec 10 secondes restantes.

Une fois que votre compte atteint 25, je lance des balles de tennis à toi. Probablement, cela va briser votre rythme puisque votre concentration est passée de compter strictement les nombres à esquiver les balles jetées votre chemin. En supposant que vous puissiez continuer à compter, votre rythme a certainement ralenti un peu. Alors maintenant la barre de progression est toujours en mouvement, mais à un rythme beaucoup plus lent avec le temps estimé restant à l'arrêt ou en train de grimper plus haut.

Pour un exemple plus pratique, pensez à télécharger un fichier. Vous téléchargez actuellement un fichier de 100 Mo à raison de 1 Mo / s. C'est très facile de déterminer l'heure estimée d'achèvement. Mais à 75%, un peu de congestion du réseau et votre taux de téléchargement tombe à 500 Ko / s.

Selon la façon dont le navigateur calcule le temps restant, votre ETA peut passer instantanément de 25 secondes à 50 secondes (en utilisant état uniquement: Taille restante / Vitesse de téléchargement ) ou, plus probablement, le navigateur utilise un algorithme de moyenne mobile qui ajusterait les fluctuations de la vitesse de transfert sans afficher de sauts spectaculaires pour l'utilisateur.

Un exemple de L'algorithme de roulement relatif au téléchargement d'un fichier peut ressembler à ceci:

  • La vitesse de transfert des 60 secondes précédentes est mémorisée avec la valeur la plus récente remplaçant la plus ancienne (par exemple, la 61ème remplace la première). taux pour le calcul est la moyenne de ces mesures.
  • Le temps restant est calculé comme suit:
  • Taille restante / Vitesse de téléchargement effective Donc, en utilisant notre scénario ci-dessus (par souci de simplicité, nous utiliserons 1 Mo = 1 000 Ko):

Après 75 secondes de téléchargement, nos 60 valeurs mémorisées seraient chacune de 1 000 Ko. Le taux de transfert effectif est de 1 000 Ko (60 000 Ko / 60), ce qui donne un temps restant de 25 secondes (25 000 Ko / 1 000 Ko).

  • À 76 secondes (la vitesse de transfert passe à 500 Ko) devient ~ 992 Ko (59 500 Ko / 60), ce qui donne un temps restant de ~ 24,7 secondes (24 500 Ko / 992 Ko).
  • À 77 secondes: Vitesse effective = ~ 983 Ko (59 000 Ko / 60) ~ 24,4 secondes (24 000 Ko / 983 Ko).
  • À 78 secondes: Vitesse effective = 975 Ko (58 500 Ko / 60), ce qui vous laisse environ 24,1 secondes (23 500 Ko / 975 Ko).
  • Vous pouvez voir le modèle qui apparaît ici comme la baisse de la vitesse de téléchargement est lentement incorporé dans la moyenne qui est utilisée pour estimer le temps restant. Selon cette méthode, si le pendage ne durait que 10 secondes puis revenait à 1 Mo / s, l'utilisateur ne remarquerait probablement pas la différence (à l'exception d'un décrochage très mineur dans le compte à rebours estimé). - il s'agit simplement d'une méthode pour relayer l'information à l'utilisateur final pour la cause sous-jacente réelle ...

Vous ne pouvez pas déterminer précisément quelque chose qui n'est pas déterministe

Finalement, l'inexactitude de la barre de progression se réduit au fait temps pour quelque chose qui n'est pas déterministe. Étant donné que les ordinateurs traitent les tâches à la demande et en tâche de fond, il est presque impossible de savoir quelles ressources système seront disponibles à un moment donné - et c'est la disponibilité des ressources système qui est nécessaire pour toute tâche. > En utilisant un autre exemple, supposons que vous exécutez une mise à niveau de programme sur un serveur qui effectue une mise à jour de base de données assez intensive. Au cours de ce processus de mise à jour, un utilisateur envoie ensuite une demande exigeante à une autre base de données exécutée sur ce système. Désormais, les ressources du serveur, en particulier pour la base de données, doivent traiter les demandes à la fois pour votre mise à niveau et pour la requête initiée par l'utilisateur - un scénario qui sera certainement mutuellement préjudiciable au temps d'exécution. En variante, un utilisateur peut lancer une demande de transfert de fichier volumineuse qui taxerait le débit de stockage, ce qui nuirait également aux performances. Ou une tâche planifiée pourrait démarrer qui effectue un processus de mémoire intensive. Vous avez l'idée.

Comme, peut-être, une instance plus réaliste pour un utilisateur ordinaire - pensez à exécuter Windows Update ou un scan antivirus. Ces deux opérations effectuent des opérations gourmandes en ressources en arrière-plan. Par conséquent, la progression de chacun dépend de ce que fait l'utilisateur à ce moment-là. Si vous lisez votre email pendant que cela fonctionne, il est probable que la demande sur les ressources système sera faible et que la barre de progression se déplacera de manière cohérente. D'un autre côté, si vous faites du montage graphique, votre demande sur les ressources du système sera beaucoup plus importante, ce qui rendra le mouvement de la barre de progression schizophrénique. Dans l'ensemble, il n'y a pas de boule de cristal. Même le système lui-même ne sait pas à quoi s'attendre dans le futur.

En fin de compte, cela n'a pas vraiment d'importance

La barre de progression a pour but d'indiquer que des progrès ont bel et bien été réalisés et le processus respectif n'est pas accroché. C'est bien quand l'indicateur de progression est précis, mais en général ce n'est qu'une gêne mineure quand ce n'est pas le cas. Pour la plupart, les développeurs ne consacreront pas beaucoup de temps et d'efforts aux algorithmes de la barre de progression car, franchement, il y a beaucoup plus de tâches importantes à passer.

Bien sûr, vous avez le droit d'être ennuyé quand une barre de progression saute automatiquement à 99% et vous fait attendre 5 minutes pour le pourcentage restant. Mais si le programme respectif fonctionne bien dans l'ensemble, rappelez-vous que les priorités du développeur étaient les mêmes.


Afficher les mots de passe Wi-Fi (WPA, WEP) enregistrés sous OS X

Afficher les mots de passe Wi-Fi (WPA, WEP) enregistrés sous OS X

Presque tout le monde qui a un ordinateur portable s'est probablement connecté à plusieurs réseaux sans fil différents au fil du temps. J'ai tendance à voyager beaucoup et à prendre mon ordinateur portable partout avec moi, alors j'ai littéralement plus d'une centaine de réseaux sans fil stockés sur mon Mac. C'e

(How-to)

Comment faire la mise à jour de l'iPhone Weather App sur une connexion mobile

Comment faire la mise à jour de l'iPhone Weather App sur une connexion mobile

L'utilisation de l'application Météo sur l'iPhone peut sembler une évidence, mais elle a une petite bizarrerie sortie de la boîte: il ne sera pas mis à jour, sauf si vous êtes connecté au Wi-Fi. Pour cela, vous devez activer ce paramètre. L'application Météo correspond à ce que vous attendez d'une application météo.

(how-to)