воскресенье, 18 апреля 2010 г.

Последствия опроса для производительности

Это перевод Performance consequences of polling. Автор: Реймонд Чен.

Опрос губителен (polling kills).

Программа не должна делать опрос - это само собой разумеющееся. Иначе это может иметь серьезные последствия для производительности системы. Это всё равно, что проверять часы каждую минуту, чтобы узнать, не наступило ли 3 часа дня, вместо того, чтобы поставить будильник.

Прежде всего, опрос означает, что небольшое количество времени процессора съедается каждым опросом, даже хотя вам нечего делать. Даже если вы настроите свой опрос так, что он использует только, скажем, ничтожную одну десятую долю процента процессора, но если вы используете эту программу на терминальном сервере с 800 одновременными соединениями, то ваш 0.1% волшебным образом превращается в 80% загрузки процессора.

Затем, тот факт, что небольшой кусок кода работает через регулярный (и короткий) промежуток времени, означает, что он (и любой связанный с ним код) не может быть выгружен из песочницы. Весь этот код должен быть постоянно загружен, только для того, чтобы сказать "неа, пока делать нечего". Если ваш код опроса трогает какие-либо данные (а он наверняка это делает), то это минимум одна страница памяти. На машине класса x86 это будет 4Кб умножить на количество запущенных экземпляров программ. На этом сервере с 800 подключениями вы только что сжевали 3 Мб памяти, все из которых постоянно находятся в оперативной памяти, просто на случай, если произойдёт редкое событие.

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

Конечно же, сама Windows тут не безгрешна, но команда производительности стоит на страже, и когда она видит случайный код опроса в системе, она "вежливо напоминает" командам, чей код они застукали за опросом, что есть и другие способы достичь цели.

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

  1. Это о потоках которые опрашивает нет ли задачи для выполнения по таймеру?
    Если не так то как?
    Вижу решения Wait(событие, вечно) и что-то еще может быть на Watable таймерах??

    ОтветитьУдалить
  2. Александр, не совсем понятно, как в Dlphhi реализовать Polling... Можете хоть чуточку развернуть эту реализацию? Благодарю!

    ОтветитьУдалить
  3. Непонятно, что вы хотите увидеть. Polling - это периодический опрос. Соответственно, реализуется он любым таймером. И показывать я это не буду, потому что это - плохо.

    ОтветитьУдалить
  4. Спасибо, помогло. Я как раз опрашиваю диски на предмет всавки Flash.

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

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

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

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

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

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