среда, 23 декабря 2009 г.

Не сохраняйте ничего, что вы можете пересчитать

Это перевод Don't save anything you can recalculate. Автор: Реймонд Чен.

В настоящее время основным ограничением производительности для многих классов программ является подкачка. Мы видели в начале этого года, что подкачка может убить сервер. Сегодня еще один пример того, как производительность стала привязана к подкачке.

Принцип - "не сохраняй ничего, что ты можешь заново рассчитать". Это, конечно же, кажется оптимизацией против интуиции: разве вам не следовало бы сохранить ответ, чтобы не тратить время на повторное вычисление?

Ответ: "это зависит от разных причин".

Если вычисление заново не очень затратно и имеет хорошую локализованность по данным, то вам бы лучше вычислять ответ заново, чем сохранять его - особенно, если его сохранение уменьшает локализуемость данных. Например, если результат сохраняется в отдельном объекте, то теперь вы рискуете page fault-ом при чтении сохранённого ответа, т.к. вам надо сперва получить ссылку на объект, а потом прочитать у него сам ответ.

В последний раз, мы видели, как этот принцип применяется к Windows 95 - так что перебазирование DLL не ставило на колени вашу машину. Мне сказали, что команда Access использовала этот принцип для значительного улучшения производительности. Вместо кэширования результатов они просто выкидывали их и вычисляли заново, когда они добавлялись в дальнейшем.

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

3 комментария:

  1. >>не ложило на колени вашу машину
    Может правильнее было бы:
    1. Не ставило на колени
    2. Не ложило на лопатки
    По-моему первоначальный перевод немного некорректен.

    ОтветитьУдалить
  2. Не ложить, а класть !
    Учебник русского языка невредно бы еще почитать

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

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

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

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

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

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