Для пояснения принципа действия сервера с предварительным ветвлением нужно сравнить его с сервером, который выполняет прием и ветвление. Как описано ранее, серверы, выполняющие прием и ветвление, в основном находятся в состоянии, заблокированном в функции accept (), ожидая нового входящего соединения. При поступлении входящего запроса на установление соединения родительский серверный процесс активизируется лишь на то время, чтобы вызвать функцию fork () и передать подключенный сокет дочернему процессу. После ветвления дочерний процесс переходит к обслуживанию соединения, а родительский возвращается к ожиданию активизации функции accept ().
Основой сервера с приемом и ветвлением являются следующие строки кода:
while ( my $с = $socket->accept ) { my $child=. fork; die unless defined $child; if ($child == 0) { # в дочернем процессе handle_c6nnection($c); exit 0; } close $c; # в родительском процессе }
Этот метод хорош при обычных условиях, но может оказаться неприменимым, если сервер работает в условиях тяжелой нагрузки. В этом случае запросы на установление соединения могут поступать так часто, что издержки вызова функции fork () будут оказывать заметное влияние и сервер потеряет способность справляться с обработкой входящих соединений. Это особенно характерно для Web-серверов, которые обрабатывают много коротких запросов, поступающих в стремительном темпе.
Общепринятым решением этой проблемы является так называемый метод с предварительным ветвлением. В соответствии с самим названием метода, серверы с предварительным ветвлением выполняют ветвление своего родительского процесса с помощью функции fork () несколько раз вскоре после запуска.
2014-11-30 15:14:57
это интересно Множественные предложения заработка в Интернет зачастую ставят в тупик поиск нужной и действительно действенной работы. Всегда востребованный это заработок на сайте и участие в разного рода партнерских программах, приносящих реальный доход. Партнерки для веб мастеров это средство получать стабильный доход ежемесячно.