Большинство опасных неправильных представлений узкого места производительности

Парни, которые записали Bespin (облачный основанный на холсте редактор кода [и больше]) недавно, говорили о том, как они осуществили рефакторинг, и оптимизируйте часть кода Bespin из-за неправильного представления, что JavaScript был медленным. Оказалось, что, когда все было сказано и сделано, их оптимизация не произвела существенных улучшений.

Я уверен, что многие из нас стараются изо всех сил писать "оптимизированный" код на основе неправильных представлений, подобных коду команд Bespin.

Кто такие некоторые общие разработчики неправильных представлений узкого места производительности, обычно подписываются на?

9
задан David Murdoch 20 April 2010 в 22:36
поделиться

8 ответов

В произвольном порядке:

«Готовься, стреляй, целься» - думая, что ты знаешь, что нужно оптимизировать, не доказывая этого (т.е. угадывая ), а затем действуя в соответствии с этим, и так как это мало помогает, поэтому предполагая, что код должен быть оптимальным с самого начала.

«Penny Wise, Pound Foolish» - думая, что оптимизация - это все о оптимизации компилятора , возня по поводу ++ i против i ++ в то время как горы времени напрасно тратятся на чрезмерно раздутые конструкции, особенно структур данных и баз данных.

«Сват летает с базукой» - он настолько очарован самыми причудливыми идеями, которые слышны в классах, что их просто используют для всего, независимо от масштаба.

«Нечеткое мышление о производительности» - использование таких терминов, как «горячая точка», «узкое место», «профилировщик» и «измерение», как если бы эти вещи были хорошо поняты и / или актуальны. (Бьюсь об заклад, меня заткнули за это!) Хорошо, по одному:

  • точка доступа - Какое определение? У меня есть один: это область физических адресов, где регистр ПК находится значительную долю времени. Это то, что сэмплеры для ПК умеют находить. Во многих проблемах с производительностью наблюдаются точки доступа , но только в самых простых программах проблема находится там же, где и точка доступа .

  • Узкое место - универсальный термин, используемый для обозначения проблем производительности, он подразумевает ограниченный канал, ограничивающий скорость выполнения работы. Неизложенное предположение состоит в том, что работа необходима.За десятилетия настройки производительности я действительно обнаружил несколько подобных проблем - очень мало. Практически все они совершенно разного характера. Вместо того, чтобы выбирать кратчайший путь от точки A до B, используются небольшие обходные пути в виде вызовов функций, которые требуют небольшого количества кода, но немало времени. Затем эти объездные пути превращаются в дополнительные объездные пути, иногда на 30 уровней глубиной. Чем больше объездные пути вложены друг в друга, тем более вероятно, что некоторые из них менее необходимы - на самом деле расточительны - и это почти всегда возникает из галопирующей всеобщности - беспрекословного чрезмерного потакания «абстракции».

  • профайлер - вещь универсальная, правда? Все, что вам нужно сделать, это получить профилировщик и провести профилирование, верно? Вы когда-нибудь задумывались о том, как легко обмануть профилировщика , чтобы он ничего не сказал вам, когда ваша цель - выяснить, что вам нужно исправить, чтобы повысить производительность? Где-нибудь в дереве вызовов заправьте небольшой ввод-вывод файла или вызов какой-нибудь системной процедуры, или пусть ваш злой близнец сделает это без вашего ведома. В какой-то момент это станет вашей проблемой, и большинство профилировщиков ее полностью упустят, потому что единственная неэффективность, которую они рассматривают, - это алгоритмическая неэффективность. Или не все ваши подпрограммы будут небольшими, и они могут не вызывать другую подпрограмму в небольшом количестве мест, поэтому ваш график вызовов говорит, что существует связь между двумя подпрограммами, но которые вызывают ? Или предположим, что вы можете вычислить, что какой-то большой процент времени тратится на путь A, который вызывает B, вызывает C.Вы можете посмотреть на это и подумать, что с этим мало что можно сделать, тогда как если бы вы также могли посмотреть на данные, передаваемые в этих вызовах, вы могли бы увидеть, нужно ли это. Вот забавный проект - выберите свой любимый профилировщик и посмотрите, сколькими способами вы можете его обмануть. То есть найдите способы заставить программу работать дольше, чтобы профилировщик не мог сказать, что вы сделали, потому что, если вы можете сделать это намеренно, вы также можете сделать это без намерения.

  • измерение - (то есть измерение времени ), это то, что профилировщики делали на протяжении десятилетий, и они гордятся точностью и точностью, с которой они измеряют. Но измерить какое время? а почему с точностью? Помните, цель состоит в том, чтобы точно определить проблемы с производительностью, чтобы вы могли плодотворно оптимизировать их для увеличения скорости. Когда вы получаете это ускорение, оно то, что есть, независимо от того, насколько точно вы его оценили заранее. Если такая точность измерения достигается за счет точности определения местоположения, то вы только что купили яблоки, а вам нужны были апельсины.

Вот список мифов о производительности.

18
ответ дан 4 December 2019 в 05:56
поделиться
  • Реляционные базы данных работают медленно.
  • Я умнее оптимизатора.
  • Это следует оптимизировать.
  • Java работает медленно

И, не связанное с этим:

Некоторые люди, столкнувшись с проблемой, думают: «Я знаю, я буду использовать регулярные выражения». Теперь у них две проблемы.

-jwz

6
ответ дан 4 December 2019 в 05:56
поделиться

Мои правила оптимизации.

  • Не оптимизируйте
  • Не оптимизируйте сейчас.
  • Профиль для определения проблемы.
  • Оптимизируйте компонент, который занимает не менее 80% времени.
  • Найдите оптимизацию, которая в 10 раз быстрее.

Моя лучшая оптимизация заключалась в сокращении времени отчета с 3 дней до 9 минут. Оптимизированный код был ускорен с трех дней до трех минут.

В своей карьере я встречал трех человек, которым было поручено произвести более быструю сортировку на VAX, чем на родную. Они неизменно могли производить сорта, которые занимали всего в три раза больше времени.

3
ответ дан 4 December 2019 в 05:56
поделиться

Если я конвертирую всю кодовую базу в [Вставьте сюда новейшую технологию xxx], это будет намного быстрее.

6
ответ дан 4 December 2019 в 05:56
поделиться

«Это должно быть как можно быстрее».

Если у вас нет проблем с производительностью, вам не нужно беспокоиться об оптимизации производительности (помимо простого уделения внимания использованию хороших алгоритмов).

Это заблуждение также проявляется в попытках оптимизировать производительность для каждого отдельного аспекта вашей программы. Я чаще всего наблюдаю это у людей, которые пытаются сократить каждую последнюю миллисекунду времени выполнения веб-приложения с небольшим объемом, не принимая во внимание, что задержка в сети займет на порядки больше времени, чем время выполнения их кода, что приведет к сокращению времени выполнения. в любом случае не имеет значения.

5
ответ дан 4 December 2019 в 05:56
поделиться

И вот что происходит, когда оптимизируется без действующего профиля. Все, что вы делаете без профиля, - это гадаете и, вероятно, тратите зря время и деньги. Я мог бы перечислить кучу других заблуждений, но многие сводятся к тому, что, если рассматриваемый код не является основным потребителем ресурсов, он, вероятно, в порядке, как есть. Это похоже на развертывание цикла for, который выполняет дисковый ввод-вывод ...

14
ответ дан 4 December 2019 в 05:56
поделиться
  • Оптимизация НЕПРАВИЛЬНОЙ части кода (народ, используйте свой профилировщик!).
  • Оптимизатор в моем компиляторе умен, поэтому мне не нужно ему помогать.
  • Java работает быстро (LOL)
  • Реляционные базы данных работают быстро (ROTFL LOL LMAO)
5
ответ дан 4 December 2019 в 05:56
поделиться

Правила просты:

  1. Попробуйте сначала использовать стандартные библиотечные функции .
  2. Попытайтесь использовать грубую силу и невежество во-вторых.
  3. Докажите , что у вас есть проблема, прежде чем пытаться выполнить какую-либо оптимизацию.
2
ответ дан 4 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: