pt.phhsnews.com


pt.phhsnews.com / Por que as barras de progresso são tão imprecisas?

Por que as barras de progresso são tão imprecisas?


Em um primeiro momento, parece que gerar uma estimativa precisa do tempo deve ser bastante fácil. Afinal, o algoritmo que produz a barra de progresso conhece todas as tarefas que precisa fazer antes do tempo ... certo?

Na maioria das vezes, é verdade que o algoritmo de origem sabe o que precisa fazer antes do tempo. No entanto, fixar o tempo que levará para executar cada etapa é uma tarefa muito difícil, se não virtualmente impossível.

Todas as tarefas não são criadas iguais

A maneira mais simples de implementar uma barra de progresso é usar um gráfico representação do contador de tarefas. Onde a porcentagem concluída é simplesmente calculada como Tarefas concluídas / Número total de tarefas . Embora isso faça sentido lógico no primeiro pensamento, é importante lembrar que (obviamente) algumas tarefas demoram mais para serem concluídas.

Considere as seguintes tarefas executadas por um instalador:

  1. Criar estrutura de pastas.
  2. Descompactar e copiar 1 GB de arquivos.
  3. Criar entradas de registro.
  4. Criar entradas do menu Iniciar.

Neste exemplo, as etapas 1, 3 e 4 seriam concluídas rapidamente, enquanto a etapa 2 levaria algum tempo. Portanto, uma barra de progresso trabalhando em uma contagem simples saltaria para 25% muito rapidamente, paralisaria um pouco enquanto a etapa 2 estava funcionando e depois saltaria para 100% quase imediatamente.

Esse tipo de implementação é bastante comum entre as barras de progresso porque, como dito acima, é fácil de implementar. No entanto, como você pode ver, está sujeito a tarefas desproporcionais que inclinam a porcentagem de progresso real em relação ao tempo restante.

Para contornar isso, algumas barras de progresso podem usar implementações nas quais as etapas são ponderadas. Considere as etapas acima em que um peso relativo é atribuído a cada etapa:

  1. Criar estrutura de pastas. [Weight = 1]
  2. Descompacte e copie 1 GB de arquivos. [Weight = 7]
  3. Crie entradas de registro. [Weight = 1]
  4. Crie entradas no menu iniciar. [Weight = 1]

Usando este método, a barra de progresso se moveria em incrementos de 10% (como o peso total é 10) com as etapas 1, 3 e 4 movendo a barra 10% na conclusão e a etapa 2 movendo-a 70%. Embora certamente não seja perfeito, métodos como este são uma maneira simples de adicionar um pouco mais de precisão à porcentagem da barra de progresso.

Resultados anteriores não garantem desempenho futuro

Considere um exemplo simples de eu pedir a você para contar até 50 enquanto Eu uso um cronômetro para você. Digamos que você conte até 25 em 10 segundos. Seria razoável supor que você contará os números restantes em 10 segundos adicionais, então uma barra de progresso que rastreia isso mostrará 50% completa com 10 segundos restantes.

Quando sua contagem chegar a 25, no entanto, eu começo a jogar bolas de tênis em você. Provavelmente, isso irá quebrar seu ritmo à medida que sua concentração passar de contar os números estritamente para evitar as bolas jogadas em seu caminho. Assumindo que você é capaz de continuar contando, seu ritmo certamente diminuiu um pouco. Então agora a barra de progresso ainda está se movendo, mas a um ritmo muito mais lento, com o tempo estimado permanecendo parado ou subindo mais alto.

Para um exemplo mais prático disso, considere um download de arquivo. Você está atualmente baixando um arquivo de 100 MB a uma taxa de 1 MB / s. Isso é muito fácil de determinar o tempo estimado de conclusão. Mas 75% do caminho até lá, alguns congestionamentos de rede atingem e sua taxa de download cai para 500 KB / s.

Dependendo de como o navegador calcula o tempo restante, seu ETA pode passar instantaneamente de 25 segundos para 50 segundos somente estado: Tamanho Restante / Velocidade de Download ) ou, muito provavelmente, o navegador usa um algoritmo de média móvel que ajusta as flutuações na velocidade de transferência sem exibir saltos dramáticos para o usuário.

Um exemplo de Algoritmo rolando com relação a baixar um arquivo pode funcionar algo como isto:

  • A velocidade de transferência para os 60 segundos anteriores é lembrada com o mais novo valor substituindo o mais antigo (por exemplo, o 61º valor substitui o primeiro).
  • taxa para fins de cálculo é a média dessas medições.
  • O tempo restante é calculado como: Tamanho restante / velocidade de download efetiva

Usando nosso cenário acima (para simplificar, usaremos 1 MB = 1.000 KB):

  • Em 75 segundos de download, nossos 60 valores lembrados seriam cada um 1.000 KB. A taxa de transferência efetiva é de 1.000 KB (60.000 KB / 60) que resulta em um tempo restante de 25 segundos (25.000 KB / 1.000 KB).
  • Em 76 segundos (onde a velocidade de transferência cai para 500 KB), a velocidade efetiva de download torna-se ~ 992 KB (59.500 KB / 60) que produz um tempo restante de ~ 24,7 segundos (24.500 KB / 992 KB).
  • Em 77 segundos: Velocidade efetiva = ~ 983 KB (59.000 KB / 60) tempo de renderização restante ~ 24,4 segundos (24.000 KB / 983 KB).
  • Em 78 segundos: Velocidade efetiva = 975 KB (58.500 KB / 60), resultando em tempo restante de ~ 24,1 segundos (23,500 KB / 975 KB).

Você pode ver o padrão emergindo aqui como o mergulho na velocidade de download é lentamente incorporado na média que é usada para estimar o tempo restante. Sob esse método, se a imersão durasse apenas 10 segundos e depois retornasse a 1 MB / s, é improvável que o usuário notasse a diferença (exceto por uma pequena parada na contagem de tempo estimada).

- esta é simplesmente uma metodologia para retransmitir informações ao usuário final para a causa subjacente real ...

Você não pode determinar com exatidão Algo que não é determinista

Por fim, a imprecisão da barra de progresso se resume ao fato de estar tentando determinar tempo para algo que não é determinístico. Como os computadores processam tarefas tanto sob demanda quanto em segundo plano, é quase impossível saber quais recursos do sistema estarão disponíveis a qualquer momento no futuro - e é a disponibilidade de recursos do sistema que é necessária para qualquer tarefa ser concluída. > Usando outro exemplo, suponha que você esteja executando uma atualização de programa em um servidor que executa uma atualização de banco de dados bastante intensiva. Durante esse processo de atualização, um usuário envia uma solicitação exigente para outro banco de dados em execução nesse sistema. Agora, os recursos do servidor, especificamente para o banco de dados, estão tendo que processar solicitações para a atualização, bem como a consulta iniciada pelo usuário - um cenário que certamente será mutuamente prejudicial para o tempo de execução. Como alternativa, um usuário poderia iniciar uma solicitação de transferência de arquivos grande que taxaria a taxa de transferência de armazenamento que também prejudicaria o desempenho. Ou uma tarefa agendada pode ser iniciada, executando um processo intensivo de memória. Você tem a idéia.

Como, talvez, uma instância mais realista para um usuário comum - considere executar o Windows Update ou uma verificação de vírus. Ambas as operações executam operações intensivas em recursos em segundo plano. Como resultado, o progresso que cada um faz depende do que o usuário está fazendo no momento. Se você estiver lendo seu e-mail durante a execução, provavelmente a demanda por recursos do sistema será baixa e a barra de progresso será movida consistentemente. Por outro lado, se você estiver fazendo edição de gráficos, sua demanda por recursos do sistema será muito maior, o que fará com que o movimento da barra de progresso seja esquizofrênico.

No geral, é simplesmente que não há bola de cristal. Nem mesmo o próprio sistema sabe em que carga ele estará em algum momento no futuro.

Em última análise, ele realmente não importa

A intenção da barra de progresso é, bem, indicar que o progresso está realmente sendo feito e o respectivo processo não é suspenso. É bom quando o indicador de progresso é preciso, mas normalmente é apenas um pequeno aborrecimento quando não é. Na maior parte, os desenvolvedores não vão dedicar muito tempo e esforço aos algoritmos de barra de progresso porque, francamente, há tarefas muito mais importantes para gastar tempo.

Claro, você tem todo o direito de ficar irritado. quando uma barra de progresso pula para 99%, completa instantaneamente e, em seguida, faz você esperar 5 minutos pelo 1% restante. Mas se o respectivo programa funcionar bem no geral, lembre-se de que o desenvolvedor tinha suas prioridades em dia.


Como carregar sua campainha com anel quando a bateria está fraca

Como carregar sua campainha com anel quando a bateria está fraca

A Campainha Anel é uma campainha com campainha habilitada para Wi-Fi com uma câmera integrada para que você possa ver rapidamente quem está na porta. Mas sua bateria interna significa que você precisa recarregá-lo uma ou duas vezes por ano. Veja como recarregar a Campainha Anel sempre que a bateria ficar fraca.

(how-to)

Como impedir temporariamente que o seu Mac durma

Como impedir temporariamente que o seu Mac durma

Digamos que você comece um grande download e vá para a cama. Quando você acorda, percebe que seu Mac foi dormir antes de terminar seu trabalho. Não há uma maneira de parar isso? Você provavelmente sabe que pode acessar as Preferências do Sistema do seu Mac> Economizador de Energia e alterar a frequência de adormecimento.

(how-to)