Calculador casi realista de descargas

Muchos programas de descargas de Internet, navegadores, y similares calculan el tiempo estimado para una descarga de varios archivos de la siguiente forma:

Tiempo restante = tiempo estimado para la descarga del que vaya a tardar más.

Y el tiempo de la descarga de cada fichero es:

Tiempo descarga = parte restante / velocidad por unidad de tiempo.

El problema de calcular el tiempo restante de una descarga múltiple de esta forma es que no tiene en cuenta que cuando un fichero termina normalmente su ancho de banda se reparte entre el resto de los archivos, por lo que la descarga de estos se acelera. Y cuando termina el segundo se acelera aún más... por lo que el tiempo inicial que da el programa generalmente suele ser bastante mayor del tiempo real para finalizar las descargas. En el programa "RapidSucker" que estoy haciendo poco a poco (le pondré una página en breve, aparte del cutreartículo anterior en la página) quería algo más realista, así que el módulo Calculador Casi Realista de Descargas que incluye hace:

  1. Calcular tiempo restante para todos los ficheros y obtener el que terminará antes y el tiempo que falta para ello.
  2. Calcular cuanto habrán avanzado la descarga el resto de ficheros cuando el primero haya terminado.
  3. Y volver al primer paso, ya con los ficheros que quedan y teniendo en cuenta su avance, sumando cada vez el tiempo transcurrido al tiempo total.

En el código del RapidSucker se puede ver una implementación de ejemplo de esto, usando recursividad (y con alguna ñapa interna actualmente, todavía estoy prototipando), en los miembros calculatePendingTime y calculatePendingTimeRec de la clase RapidDownloader.

Contents