Russian subtitles

← 03-04 Batching_and_Caching

03-04 Batching_and_Caching

Get Embed Code
13 Languages

Showing Revision 3 created 01/19/2016 by Natalia Savvidi.

  1. Я хочу рассказать вам о моих любимых
    методах улучшения производительности:
  2. это группировка и кэширование.
  3. Как мы уже обсудили,
    некоторые функции
  4. или операции подразумевают
    определенные расходы ресурсов,
  5. в дополнение к ресурсам
    на непосредственное их исполнение.
  6. Например, загрузка данных перед
    их исполнением в новый участок памяти
  7. или сортировка набора значений
    перед осуществлением в них поиска.
  8. Когда операции исполняются много раз,
    где много — это очень большое число,
  9. эти издержки могут серьезно повлиять
    на производительность вашего приложения.
  10. Группировка позволяет
    решить эту проблему
  11. путем устранения издержек
    на каждое исполнение,
  12. как несколько человек экономят на бензине,
    когда едут все вместе на одной машине.
  13. Это часто встречается в тех участках кода,
    где необходимо подготовить данные
  14. до того, как их можно будет использовать.
  15. Давайте предположим, что наиболее
    эффективный способ найти значение
  16. в множестве — это проделать сортировку,
    а затем бинарный поиск.
  17. Это, конечно, не самый
    эффективный способ,
  18. но дослушайте меня:
    я пытаюсь кое-что объяснить.
  19. Проще всего для этого будет
    написать функцию,
  20. которая, имея множество и значение,
  21. отсортирует множество, а затем
    проверит, есть ли в нём это значение.
  22. В некоторых случаях
    это может сработать,
  23. но если у вас, скажем, 10 000 значений,
    которые вы хотите проверить,
  24. а счёт элементов во множестве
    идет на миллионы,
  25. то вы уже расходуете
    уйму ресурсов на каждую проверку
  26. из-за сортировки.
  27. Решение здесь довольно простое.
  28. Вам нужно создать один раз
    отсортированный вариант множества,
  29. после чего тестировать на вхождение
    все эти 10 000 значений.
  30. Так работает группировка.
  31. Вынеся за скобки повторяющуюся операцию,
    мы делаем её всего один раз.
  32. Сходный принцип лежит в основе
    концепции кэширования.
  33. Это безусловно самый важный метод
    улучшения производительности,
  34. в основном потому, что он лежит в основе
    всех современных компьютерных технологий.
  35. Возьмём, например, ваш компьютер.
  36. Весь смысл оперативки — предоставить
    место для хранения информации,
  37. доступ к которому процессор
    получает быстрее, чем к жёсткому диску.
  38. Или возьмём компьютерные сети
    и вообще современный интернет:
  39. по всему миру находятся огромные
    хранилища серверов — дата-центры.
  40. Единственная их функция — хранить,
    или кэшировать, часто вызываемый контент,
  41. чтобы ваш компьютер не обращался
    к серверу за 20 000 км каждый раз,
  42. когда ваш друг из Египта
    постит фото.
  43. Кроме случаев, когда вы сами в Египте.
    Но вы, наверняка, уловили мою мысль.
  44. Оптимизация кода для кэшинга
    обычно происходит в тех местах,
  45. где данные рассчитываются
    много раз,
  46. но результат всегда
    получается одинаковый.
  47. Например, если вы находитесь
    в середине цикла, который рассчитывает
  48. определитель матрицы 4x4
  49. с одним и тем же результатом,
    вы теряете в быстродействии
  50. при каждом прохождении
    этого цикла.
  51. Вместо этого, рассчитайте определитель
    вне цикла, сохраните его,
  52. а затем сделайте отсылку из цикла
    к кэшированному результату.
  53. Причина, по которой я так люблю
    группировку и кэширование,
  54. состоит в том, что почти все возможные
    улучшения производительности,
  55. в том числе обсуждаемые
    в этом курсе,
  56. по сути являются вариацией
    этих двух базовых методов.
  57. И если вы всерьёз хотите стать
    гуру по вопросам быстродействия,
  58. вам нужно освоить
    хитрости использования
  59. этих удивительно мощных методов.
  60. Что ж, приступим.