sobota, czerwca 05, 2010

ETA - liczymy szacowany czas zakończenia [przybycia ;-)]

Bardzo prosta sztuczka programistyczna, prawdę mówiąc nawet nie sztuczka. Każdy z nas wie jak to liczyć, ale nie zawsze wie to "od strzału".Mamy jakieś obliczenia do wykonania, jakieś czasochłonne operacje, cokolwiek. Jeżeli wiemy ile tych operacji musimy wykonać możemy pokusić się o podanie użytkownikowi szacowanego czasu zakończenia.To proste. Mamy N operacji do wykonania, wykonaliśmy jak na razie count operacji, co zajęło nam time czasu.Wtedy cały czas zadania to około:
T=N/count*time
wyrażone w jednostkach czasu.Czyli jeżeli mamy wykonać 530 operacji, z czego 128 zajęło nam 67 sekund to wiemy, że cały proces powinien zająć około 261 sekund = 4 minuty i 21 sekund.Możemy więc użytkownikowi napisać, że zadanie zostanie zakończone za około T sekund, minut, whatever. Lub, że szacowany czas zakończenia operacji to:
Tzakończenia=Taktualny+(N/count-1)*time
Na koniec informacja jak tego użyć w Java'ie ;-) N to wartość liczba wszystkich iteracji, count to numer aktualnej iteracji.
long start = System.currentTimeMillis(); // czas rozpoczęcia[...]double t = (double)N/count*(System.currentTimeMillis()-start);Calendar cal = Calendar.getInstance();cal.add(Calendar.SECOND, (int)(t/1000));System.out.println(cal.getTime()+" "+t);
Na koniec jeszcze uwaga, że gdy mamy naprawdę dużo operacji to bez sensu jest za każdym razem wszystko wyliczać, wtedy można co 10, 100, 1000 czy dowolną inną liczbę iteracji zrobić wyliczenia. Można też je robić co zadany interwał.


Podobne postybeta
SleepAdvisor - komórka pomaga w wyspaniu się ;-)
Google App Engine i DatastoreTimeoutException
Plus dla Scala, minus dla Groovy ;-)
Raspberry Pi to nie jest demon prędkości ;-)
Wiedza magiczna