-
Title:
03-04 Batching_and_Caching
-
Description:
03-04 Batching_and_Caching
-
Я хочу рассказать вам о моих любимых
методах улучшения производительности:
-
это группировка и кэширование.
-
Как мы уже обсудили,
некоторые функции
-
или операции подразумевают
определенные расходы ресурсов,
-
в дополнение к ресурсам
на непосредственное их исполнение.
-
Например, загрузка данных перед
их исполнением в новый участок памяти
-
или сортировка набора значений
перед осуществлением в них поиска.
-
Когда операции исполняются много раз,
где много — это очень большое число,
-
эти издержки могут серьезно повлиять
на производительность вашего приложения.
-
Группировка позволяет
решить эту проблему
-
путем устранения издержек
на каждое исполнение,
-
как несколько человек экономят на бензине,
когда едут все вместе на одной машине.
-
Это часто встречается в тех участках кода,
где необходимо подготовить данные
-
до того, как их можно будет использовать.
-
Давайте предположим, что наиболее
эффективный способ найти значение
-
в множестве — это проделать сортировку,
а затем бинарный поиск.
-
Это, конечно, не самый
эффективный способ,
-
но дослушайте меня:
я пытаюсь кое-что объяснить.
-
Проще всего для этого будет
написать функцию,
-
которая, имея множество и значение,
-
отсортирует множество, а затем
проверит, есть ли в нём это значение.
-
В некоторых случаях
это может сработать,
-
но если у вас, скажем, 10 000 значений,
которые вы хотите проверить,
-
а счёт элементов во множестве
идет на миллионы,
-
то вы уже расходуете
уйму ресурсов на каждую проверку
-
из-за сортировки.
-
Решение здесь довольно простое.
-
Вам нужно создать один раз
отсортированный вариант множества,
-
после чего тестировать на вхождение
все эти 10 000 значений.
-
Так работает группировка.
-
Вынеся за скобки повторяющуюся операцию,
мы делаем её всего один раз.
-
Сходный принцип лежит в основе
концепции кэширования.
-
Это безусловно самый важный метод
улучшения производительности,
-
в основном потому, что он лежит в основе
всех современных компьютерных технологий.
-
Возьмём, например, ваш компьютер.
-
Весь смысл оперативки — предоставить
место для хранения информации,
-
доступ к которому процессор
получает быстрее, чем к жёсткому диску.
-
Или возьмём компьютерные сети
и вообще современный интернет:
-
по всему миру находятся огромные
хранилища серверов — дата-центры.
-
Единственная их функция — хранить,
или кэшировать, часто вызываемый контент,
-
чтобы ваш компьютер не обращался
к серверу за 20 000 км каждый раз,
-
когда ваш друг из Египта
постит фото.
-
Кроме случаев, когда вы сами в Египте.
Но вы, наверняка, уловили мою мысль.
-
Оптимизация кода для кэшинга
обычно происходит в тех местах,
-
где данные рассчитываются
много раз,
-
но результат всегда
получается одинаковый.
-
Например, если вы находитесь
в середине цикла, который рассчитывает
-
определитель матрицы 4x4
-
с одним и тем же результатом,
вы теряете в быстродействии
-
при каждом прохождении
этого цикла.
-
Вместо этого, рассчитайте определитель
вне цикла, сохраните его,
-
а затем сделайте отсылку из цикла
к кэшированному результату.
-
Причина, по которой я так люблю
группировку и кэширование,
-
состоит в том, что почти все возможные
улучшения производительности,
-
в том числе обсуждаемые
в этом курсе,
-
по сути являются вариацией
этих двух базовых методов.
-
И если вы всерьёз хотите стать
гуру по вопросам быстродействия,
-
вам нужно освоить
хитрости использования
-
этих удивительно мощных методов.
-
Что ж, приступим.