суббота, 6 марта 2010 г.

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

Это перевод Performance gains at the cost of other components. Автор: Реймонд Чен.

В группе операционных систем, мы должны принять целостный взгляд на производительность. Цель состоит в том, чтобы заставить всю систему работать быстрее, балансируя приложения между друг другом для общего блага.

Приложения, с другой стороны, как правило, имеют эгоистичную точку зрения на производительность: "Я сделаю всё возможное, чтобы заставить себя работать быстрее. Влияние на остальную часть системы - не моя забота".

Некоторые приложения заносят себя в папку Автозагрузка, так что они смогут запуститься быстрее. На самом деле, это не делает систему быстрее; просто смещает приоритеты. Откусывая от стоимости запуска приложения и приплетая это время к запуску ОС, время от запуска приложения пользователем до готового приложения действительно уменьшается. Но общее время остаётся неизменным.

Например, рассмотрим следующую диаграмму. "*" отмечает момент включения машины, "+" означает время, когда пользователь щёлкнул по ярлычку программы, а "!" указывает на точку, когда приложение полностью готово.
* Запуск ОС + Запуск приложения !
Разработчик приложения говорит: "дьявол, вы только посмотрите на эту огромную розовую полоску! Чтобы нам сделать, чтобы уменьшить её? О, я знаю: давайте разобьём запуск нашей программы на две части....
* Запуск ОС + Запуск приложения 1 Запуск приложения 2 !
... и поместим часть её в Автозагрузку"
* Запуск ОС Запуск приложения 1 + Запуск приложения 2 !
"Вау, вы только посмотрите на розовую часть теперь (что отображает время для полного запуска нашего приложения после команды пользователя) - насколько же она стала короче!"

Потом команда разработчиков указывает это, более короткое, значение в своих отчётах производительности и, может быть, они устраивают ужин, чтобы это отпраздновать.

Конечно же, если вы взглянете на картину целиком, от звёздочки до восклицательного знака, то увидите, что ничего не изменилось. Время полной готовности вашего приложения с холодного старта не изменилось. Всё, что это "улучшение производительности" сделало - rob Peter to pay Paul. Время проводимое в "Запуске приложения 1" теперь снимается с запуска всей системы, а не с приложения. Вы переставили местами числа, но пользователь ничего не выиграл.

Фактически, пользователь даже что-то потерял. В диаграммах выше мы предполагали, что пользователь хочет запустить вашу программу! Но если он не хочет этого делать, а просто хочет проверить свою почту, то он всё равно будет платить за "Запуск приложения 1", даже хотя он не собирается запускать вас.

Другой пример приложения с эгоистичным взглядом на производительность пришёл от компании, которая разрабатывала обработчик оверлея иконок. Оболочка рассматривает оверлеи иконок как низко-приоритетные вещи, поскольку гораздо более важным является вообще показать значок на экране, чтобы пользователь скорее начал делать то, что он там собирался делать. Декорации могут подождать. Так вот, эта компания хотела знать, как они могут улучшить свою производительность, чтобы показать свои оверлеи на экране ещё раньше, чем даже появятся сами значки, показывая этим своё феноменально эгоистичное представление "производительности".

Производительность - это сделать так, чтобы пользователь быстрее решал свои задачи. Если задача не включает в себя запуск/использование вашей программы, то ваше "улучшение производительности", на самом деле, является деградацией производительности. Нет, я уверен, что ваша программа прекрасна и полезна, но будет несколько самоуверенно полагать, что каждый пользователь, который установит её, будет считать её запуск самым важным делом в своей жизни.

При.пер.: упаковщики исполняемых файлов - ещё один пример не самой дальновидной "оптимизации".

5 комментариев:

  1. >При.пер.: упаковщики исполняемых файлов - ещё один пример не самой дальновидной "оптимизации".

    А можете пояснить? Действительно интересно где в этом прокол.

    ОтветитьУдалить
  2. На эту тему написано достаточно много.

    Вот например.

    Кратко суть: упаковка исполняемых файлов пришла из времён MS-DOS, когда она имела смысл. Все её преимущества теряются в Win32 (тем не менее, изредка бывают ситуации, когда упаковка полезна, но они - единичны; в большинстве случаев, упаковывая файлы вы делаете только хуже).

    ОтветитьУдалить
  3. > rob Peter to pay Paul.
    В русском языке есть эквивалент "тришкин кафтан". Правда, он известен только начитанным людям (нет, я не хочу вас обидеть :)
    А насчет упаковки – она более-менее защищает от взлома, но это, пожалуй, и все.

    ОтветитьУдалить
  4. Ну, мне кажется, что довольно удачный перевод будет "отдать долги, сделав новые".

    ОтветитьУдалить
  5. Интересно, почему никому из разработчиков Adobe Reader'а (и прочей подобной шелухи, очень любящей пихать свои runner'ы в автозагрузку) не приходит в голову запускать это самый runner при первом запуске самого приложения, а не при старте системы?..

    ОтветитьУдалить

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.