YouTube

Got a YouTube account?

New: enable viewer-created translations and captions on your YouTube channel!

Russian subtitles

← 03-13 Container_Performance

03-13 Container_Performance

Get Embed Code
13 Languages

Showing Revision 4 created 12/31/2015 by Natalia Savvidi.

  1. Мы уже обсудили, что медленное
    исполнение кода может быть вызвано

  2. особенностями аппаратного обеспечения.
  3. Помните проблему с плавающей запятой
    и условным переходом?
  4. Для современной техники она
    уже не так актуальна.

  5. Но есть комплекс проблем, на которые
    вам всё ещё стоит обращать внимание.
  6. Речь идёт о быстродействии примитивов
    в том языке, на котором вы пишете.
  7. Возьмём фундаментальный
    алгоритм, например упорядочивание.
  8. Существует множество
    способов упорядочивания.
  9. В зависимости от обстоятельств,
    одни могут быть лучше других.
  10. Например, обычно Quicksort
    работает быстрее, чем Bubble Sort,
  11. кроме случаев,
    когда у вас менее 1000 элементов.
  12. Или возьмём поиск
    по большому упорядоченному списку.
  13. Обычно его лучше проводить
    с помощью Binary Search.
  14. Но поиск объектов в неупорядоченном
    массиве — это совсем другая история.
  15. Вместо того, чтобы сравнивать
    каждый объект с искомым значением,
  16. вы можете использовать функцию Hash
    и получить результат мгновенно.
  17. Это всё базовые правила современной
    информатики и структур данных.
  18. К счастью, современные языки,
    такие как Java, содержат уже готовые
  19. контейнеры и алгоритмы, и вам не нужно
    писать с нуля снова и снова
  20. функции MurmurHash3 или Quicksort.
  21. Но нужно отметить один момент.
  22. Во всём моём опыте программирования
  23. одна проблема постоянно сказывается
    на быстродействии проекта:
  24. это быстродействие контейнеров,
    содержащихся в языке.
  25. Это же так здорово, да?
  26. Java предоставляет вам программную
    реализацию класса vector, чтобы
  27. вы могли двигать, выталкивать, добавлять
    и удалять объекты по своему усмотрению.
  28. Но такая гибкость обеспечена за счет
    скрытой структуры связанных списков,
  29. которая обладает уникальными
    характеристиками быстродействия.
  30. Пока вы обращаетесь только к верхней
    части списка, работа идёт очень быстро.
  31. Но попытка вставить
  32. или удалить объект в других местах
    сделает время задержки максимальным.
  33. Главный вывод здесь такой:
    наличие этих контейнеров в базовой системе
  34. ещё не гарантирует
    быстроту их действия
  35. в контексте вашей программы.
  36. Джеймс Сазерленд опубликовал результаты
    серии тестов производительности,
  37. проведённых на структурах данных,
    которые предоставляет Java.
  38. Он обнаружил некоторые расхождения между
    производительностью и функциональностью,
  39. на которые необходимо обращать внимание.
  40. К примеру, он заметил
    что метод Hashtable
  41. может быть примерно на 22% быстрее,
    чем метод HashMap,
  42. в зависимости от способа
    использования контейнеров.
  43. К чему я веду?
  44. Вы составили профиль тех контейнеров,
    которые используете?
  45. Вы уверены, что выбрали
    самые быстрые контейнеры
  46. подходящие для вашего кода?
  47. Ну да. Так я и думал.
  48. Хорошая новость в том, что вы можете
    увидеть быстродействие этих контейнеров
  49. с помощью удобных
    MPI для профилирования на Android.
  50. Давайте посмотрим,
    выдержит ли критику код Криса.