Jak szybko jest wystarczająco szybko?

Załóżmy, że wybrałeś dobry algorytm i zaimplementowałeś go bez zbytniego dbania o optymalizację, jak to zwykle bywa przy pierwszych próbach. Czy warto poświęcić czas na jego optymalizację? Optymalizacja wydajności może być bardzo kosztowną czynnością. Nie możesz próbować optymalizować swojego kodu, chyba że musisz. Twój czas jest cenny i prawdopodobnie lepiej spędzić go na robieniu czegoś innego. Powiedzmy, że z jakiegoś powodu musisz przyspieszyć implementację. Pierwszą rzeczą, o której musisz zdecydować, jest to, jak szybko jest wystarczająco szybko. Czy twój algorytm musi po prostu zakończyć się w ciągu kilku godzin zamiast kilku dni, czy też musisz zejść do poziomów mikrosekund? Czy jest to bezwzględny wymóg, czy po prostu powinieneś wykonać najlepszą pracę, jaką możesz w określonym czasie? Są to ważne pytania, które należy rozważyć przed optymalizacją kodu, a czasami rozwiązaniem nie jest nawet optymalizacja. Nierzadko zdarza się, że klienci wolą wydawać więcej pieniędzy na używanie pewnego rodzaju zasobów w chmurze w celu rozwiązania problemu z wydajnością, zamiast spędzać cenny czas na optymalizowaniu wydajności algorytmu, zwłaszcza jeśli mogą zapewnić większą wartość biznesową, robiąc coś innego. Oprócz wspomnianego wcześniej kompromisu między czasem maszynowym a czasem ludzkim, przy podejmowaniu decyzji o optymalizacji implementacji algorytmu należy wziąć pod uwagę inne kwestie. Chcesz, aby Twój kod był czytelny? Czy chcesz, aby Twój kod był dostępny? Często zdarza się, że bardziej wydajny kod jest również trudniejszy do zrozumienia. Co więcej, jeśli tworzysz kod, który jest wykonywany równolegle, nałoży to szereg ograniczeń na typ systemów, które mogą go wykonać, i musisz o tym pamiętać. Proponuję ograniczyć do minimum liczbę optymalizacji; dzięki temu osiągniesz swój cel dotyczący tego, jak szybko musi działać implementacja, i nie rób więcej. Proces będzie prosty: znajdź najważniejsze wąskie gardło, usuń je (lub przynajmniej zmniejsz jego wpływ), sprawdź, czy Twoja implementacja jest wystarczająco szybka, a jeśli nie, powtórz. W tym rozdziale przejdziemy przez ten cykl kilka razy i chociaż z perspektywy czasu wydaje się to łatwe, w rzeczywistości może być dość trudne, szczególnie w przypadku złożonych algorytmów.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *