Czas to pojęcie względne
Dziś będzie lżej. Wczorajszy tekst o pisaniu kodu bez ifów spotkał się ze stwierdzeniem „po chuj tak jak to jest nieoptymalne”. Ok, prawda. Kod tak napisanego equals będzie w skrajnym przypadku, czyli z jednym polem, które nigdy nie jest null, wolniejszy o jakiś rząd wielkości. W takim przypadku będzie też, być może, trochę bardziej zagmatwany. Zresztą zwróciłem uwagę na ten problem poruszając kwestię narzędzi do analizy statycznej. Chodziło tam jednak o pokazanie, że można ukryć ifologię i do testów skierować tylko kod, który ma jedną ścieżkę przebiegu.
Dobra, ale co z optymalizacją. Pytanie czy optymalizacja polegająca na eliminowaniu kolejnych opakowań ma sens w typowym przypadku. Załóżmy, że będziemy wstanie urwać 1ms na każdym wywołaniu metody equals. Czy to dużo czy mało?
Poniżej tabelka z przelicznikiem
Operacja | Czas wykonania (około) | Czas po skalowaniu 1ns → 1s |
---|---|---|
Dostęp do L1 | 1ns | 1s |
Dostęp do RAM | 30ns | około 30s |
Dostęp do dysku (HDD 7200) | 4ms | około 47 dni |
Ping google.com ode mnie z domu | średnia dla 10 wywołań 18,6ms | około 215 dni |
Zatem zanim zaczniemy urywać µs na pojedynczych elementach kodu to może warto popatrzeć na prawdziwe spowalniacze.