Степень распараллеливания
Рассмотрим одну из характеристик реализации параллельного сервера: допустимую степень распараллеливания. Как было указано выше, степень распараллеливания работы сервера характеризуется как общее число потоков выполнения, которые могут работать в сервере в любое указанное время1. Степень распараллеливания меняется со временем, по мере того, как сервер создает потоки для обработки входящих запросов на установление соединения или ведомый поток заканчивает обслуживание соединения и завершает свою работу. Программистов и системных администраторов обычно не интересует, какова степень распараллеливания в любой момент времени, но для них важно то, какая максимальная степень распараллеливания может быть достигнута сервером в процессе его функционирования. Как действуют подарочные карты рив гош, читайте условия на сайте vpodarok.ru.
Лишь немногие из представленных до сих пор проектов предусматривают определение максимальной степени распараллеливания сервера. Большинство проектов допускает создание ведущим процессом сервера любого числа ведомых параллельных процессов для обработки всех входящих запросов.
Обычно в параллельном сервере с установлением логического соединения создается по одному ведомому процессу (или потоку) для каждого запроса на установление соединения, полученного от клиента. Безусловно, на практике сервер не может поддерживать произвольное число соединений. В каждой реализации протокола TCP установлено ограничение на число возможных активных соединений, а каждая операционная система накладывает ограничение на объем доступных ресурсов, таких как число потоков (система должна ограничивать либо число потоков, доступных для каждого пользователя, либо общее число доступных потоков). После достижения сервером одного из этих пределов система будет отклонять его требования на выделение дополнительных ресурсов.
В целях расширения области применения сервера многие программисты стараются не устанавливать постоянный максимальный предел степени распараллеливания в своей программе. Если в коде сервера не установлена заранее определенная максимальная степень распараллеливания, то одна и та же реализация может применяться при самых разных обстоятельствах (например, и в тех случаях, если не требуется значительное распараллеливание, и в тех случаях, если количество клиентов очень велико). Программисту не приходится корректировать код или перетранслировать свою программу при перемещении сервера из одной прикладной среды в другую. Однако серверы, в которых не заданы ограничения на степень распараллеливания, могут создавать предпосылки аварии в тех случаях, если нагрузка слишком велика. Дело в том, что степень распараллеливания может возрасти настолько, что операционная система серверного компьютера фактически не сможет функционировать.
Напомним, что параллельные потоки могут входить в состав одного и того же процесса (так называемая многопотоковая реализация) или каждый поток может быть связан с отдельным процессом (так называемая однопотоковая реализация). Максимальная степень распараллеливания может регламентироваться и в том, и в другом случае.