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

Серверы, степень распараллеливания которых возрастает с учетом потребностей, могут оказаться наиболее эффективными, поскольку они не требуют таких системных ресурсов, как потоки или буферы, до тех пор, пока в них не возникает необходимость. Поэтому серверы, управляемые с учетом потребностей, не захватывают ресурсы без необходимости. Кроме того, серверы, управляемые с учетом потребностей, обеспечивают достаточно низкое наблюдаемое время отклика, поскольку могут обрабатывать сразу несколько запросов, не ожидая завершения обработки одного запроса перед переходом к следующему.
16.5. Издержки распараллеливания
Хотя в целом стремление обеспечить распараллеливание с учетом потребностей можно только приветствовать, варианты программ, представленные в предыдущих главах, не всегда позволяют добиться оптимальных результатов. Чтобы понять, с чем это связано, необходимо изучить все тонкости создания и планирования потоков или процессов, а также подробно рассмотреть работу сервера. Основной вопрос состоит в том, как в данном случае оценивать затраты и полученные результаты. В частности, необходимо определить преимущества и недостатки распараллеливания. Продажа анкеров. Выгодные цены: анкер крепеж. Крепеж оптом.
16.6. Издержки и задержки
Во всех проектах серверов, рассматриваемых в предыдущих главах, мерой потребности считалось число входящих запросов на установление соединения, и эти запросы служили для оптимизации операции повышения степени распараллеливания. Ведущий сервер ожидал поступления запроса и создавал для его обработки новый ведомый процесс или поток сразу после получения запроса. Поэтому степень распараллеливания в любой момент времени отражала число, полученных сервером запросов, обработка которых не была закончена.
При всей внешней простоте серверной программы, управляемой с учетом потребностей, создание ведомого потока или процесса для обработки каждого нового запроса может оказаться весьма дорогостоящим. Вне зависимости от того, используется ли в сервере транспортный протокол с установлением или без установления логического соединения, операционная система должна информировать ведущий процесс о том, что поступило сообщение или запрос на установление соединения. Затем ведущий процесс должен потребовать от операционной системы создания ведомого процесса.
На получение запроса из сети и создание ведомого процесса может потребоваться немало времени. Создание процесса или потока не только задерживает обработку запроса, но и потребляет системные ресурсы. Поэтому в обычном однопроцессорном компьютере сервер будет простаивать в течение всего того времени, пока операционная система создает новый ведомый процесс и переключает контекст.