Задача выполнения ввода-вывода в дочернем соединении возлагается на дочерний процесс, а родительский процесс продолжает слушать порт для приема новых входящих соединений. После того как дочерний процесс заканчивает обработку соединения, он просто прекращает свое существование.
Например при поточной конвертации файла документа, вся основная задача ложиться на порожденный дочерний процесс программы обработки. И при этом пользователю неважно, чем открыть файл doc , дочерний процесс конвертера приведет данный формат к любому требуемому виду и после обработки завершится.
В сервере с ветвлением одновременная работа родительского и дочернего процессов обеспечивается благодаря поддержке многозадачности в операционной системе. В любой момент времени в системе существует один родительский процесс, а также нуль и более дочерних процессов, причем каждый дочерний процесс занимается обслуживанием отдельного клиентского соединения.
Этот способ организации работы может применяться на тех платформах, где реализована функция fork (). Эта функция имеется во всех версиях Perl для UNIX , а также в версиях 5.6 и последующих версиях на платформах Win32. В версии Perl для Мacintosh функция fork () в настоящее время не поддерживается.
Частным случаем многозадачного сервера является так называемый “супердемон” inetd, который может применяться для одновременного запуска нескольких экземпляров простой серверной программы; при этом сам сервер почти не требует доработки. Демон inetd будет рассмотрен в конце данного раздела.
Многопоточный сервер.
Более сложным способом организации одновременного обслуживания клиентов является многопоточная обработка. В основе этого способа лежат те же принципы, что и в описанном выше способе, поскольку сервер вызывает функцию accept () в непрерываемом цикле. Каждый раз, когда функция accept () возвращает подключенный сокет, сервер запускает новый поток выполнения для обслуживания клиентского сеанса. Потоки аналогичны процессам, но они совместно используют одни и те же ресурсы памяти и другие ресурсы с родительским процессом. После завершения заботы поток уничтожается. В этой модели применяется несколько одновременно работающих потоков выполнения: один обслуживает основной цикл accept (), а другие - клиентские сеансы.