Глава 30 Альтернативное устройство клиента и сервера

Глава 30

Альтернативное устройство клиента и сервера

30.1. Введение

При написании сервера под Unix мы можем выбирать из следующих вариантов управления процессом:

? Наш первый сервер, показанный в листинге 1.5, был последовательным (iterative), но количество сценариев, для которых этот вариант является предпочтительным, весьма ограничено, поскольку последовательный сервер не может начать обработку очередного клиентского запроса, не закончив полностью обработку текущего запроса.

? В листинге 5.1 показан первый в данной книге параллельный (concurrent) сервер, который для обработки каждого клиентского запроса порождал дочерний процесс с помощью функции fork. Традиционно большинство серверов, работающих под Unix, попадают в эту категорию.

? В разделе 6.8 мы разработали другую версию сервера TCP, в котором имеется только один процесс, обрабатывающий любое количество клиентских запросов с помощью функции select.

? В листинге 26.2 мы модифицировали параллельный сервер, создав для каждого клиента по одному потоку вместо одного процесса.

В этой главе мы рассмотрим два других способа модификации устройства параллельного сервера.

Предварительное создание дочерних процессов (preforking). В этом случае при запуске сервера выполняется функция fork, которая создает определенное количество (пул) дочерних процессов. Обработкой очередного клиентского запроса занимается процесс, взятый из этого набора.

Предварительное создание потоков (prethreading). При запуске сервера создается некоторое количество (пул) потоков, и для обработки каждого клиента используется поток из данного набора.

В данной главе мы будем рассматривать множество вопросов, связанных с предварительным созданием потоков и процессов. Например, что произойдет, если в пуле окажется недостаточное количество процессов или потоков? А если их будет слишком много? Как родительский и дочерние процессы (или потоки) синхронизируют свои действия?

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

В этой главе мы рассматриваем девять различных способов устройства сервера и взаимодействие каждого из этих серверов с одним и тем же клиентом. Клиент-серверный сценарий типичен для WWW: клиент посылает небольшой по объему запрос, а сервер отвечает ему, отсылая соответствующие запросу данные. Некоторые из этих серверов мы уже достаточно подробно обсуждали (например, параллельный сервер, вызывающий функцию fork для обработки каждого клиентского запроса), в то время как предварительное создание процессов и потоков являются новыми для нас концепциями, которые и будут подробно рассмотрены в этой главе.

Мы запускали различные экземпляры клиента с каждым сервером, измеряя время, которое процессор тратит на обслуживание определенного количества клиентских запросов. Чтобы информация об этом не оказалась рассеянной по всей главе, мы свели все полученные результаты в табл. 30.1, на которую в этой главе будем неоднократно ссылаться. Следует отметить, что значения времени, указанные в этой таблице, соответствуют процессорному времени, затраченному только на управление процессом, так как из фактического значения времени процессора мы вычитаем время, которое тратит на выполнение того же задания последовательный сервер, не имеющий накладных расходов, связанных с управлением процессом. Иными словами, нулевой точкой отсчета в данной таблице для нас является время, затраченное последовательным сервером. Для большей наглядности мы включили в таблицу строку для последовательного сервера с нулевыми значениями времени. В этой главе термином время центрального процессора на управление процессом (process control CPU time) мы обозначаем разность между фактическим значением времени центрального процессора и временем, затраченным последовательным сервером, для каждой конкретной системы.

Таблица 30.1. Сравнительные значения времени, затраченного каждым из обсуждаемых в данной главе сервером

Описание сервера Время центрального процессора на управление процессом
0 Последовательный (точка отсчета; затраты на управление процессом отсутствуют) 0,0
1 Параллельный сервер, один вызов функции fork для обработки одного клиента 20,90
2 Предварительное создание дочерних процессов, каждый из которых вызывает функцию accept 1,80
3 Предварительное создание дочерних процессов с блокировкой для защиты accept 2,07
4 Предварительное создание дочерних процессов с использованием взаимного исключения для защиты accept 1,75
5 Предварительное создание дочерних процессов, родительский процесс передает дочернему дескриптор сокета 2,58
6 Параллельный сервер, создание одного потока на каждый клиентский запрос 0,99
7 Предварительное создание потоков с использованием взаимного исключения для защиты accept 1,93
8 Предварительное создание потоков, главный поток вызывает accept 2,05

Все приведенные выше значения времени были получены путем запуска клиента, показанного в листинге 30.1, на двух различных узлах в той же подсети, что и сервер. Во всех тестах оба клиента порождали пять дочерних процессов для создания пяти одновременных соединений с сервером, таким образом максимальное количество одновременных соединений с сервером было равно 10. Каждый клиент запрашивал 4000 байт данных от сервера по каждому соединению. В случае, когда тест подразумевает предварительное создание дочерних процессов или потоков при запуске сервера, их количество равно 15.

Некоторые версии нашего сервера работали с предварительно созданным пулом потоков или процессов. Интересным моментом является распределение клиентских запросов по потокам или дочерним процессам, находящимся в накопителе. В табл. 30.2 показаны варианты этого распределения, которые также будут обсуждаться в соответствующих разделах.

Таблица 30.2. Количество клиентов, обслуженных каждым из 15 дочерних процессов или потоков

№ процесса или потока Предварительное создание процессов без защиты accept (строка 2) Предварительное создание процессов с защитой accept (строка 3) Предварительное создание процессов, передача дескриптора (строка 5) Предварительное порождение потоков, защита accept (строка 7)
0 333 347 1006 333
1 340 328 950 323
2 335 332 720 333
3 335 335 583 328
4 332 338 485 329
5 331 340 457 322
6 333 335 385 324
7 333 343 250 360
8 332 324 105 341
9 331 315 32 348
10 334 326 14 358
11 333 340 9 331
12 334 330 4 321
13 332 331 1 329
14 332 336 0 320
5000 5000 5000 5000
Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Глава 1. Как работает сканирующее устройство

Из книги Секреты сканирования на ПК автора Леонтьев Б К

Глава 1. Как работает сканирующее устройство В процессе ввода изображения в компьютер в первую очередь необходимо преобразовать его в последовательность электрических сигналов. Для этого используются так называемые фотоэлектронные элементы, которые проводят ток


Спонсоры лизинга сервера (и клиента)

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

Спонсоры лизинга сервера (и клиента) Заключительной темой нашего связанного с лизингом обсуждения цикла существования САО-типов и WKO-синглетов будет спонсорство лизинга. Как вы только что убедились, для каждого объекта САО-типа и WKO-синглета имеются параметры лизинга,


15.11. Досрочное завершение клиента или сервера

Из книги UNIX: взаимодействие процессов автора Стивенс Уильям Ричард

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


16.7. Досрочное завершение сервера или клиента

Из книги Сетевые средства Linux автора Смит Родерик В.

16.7. Досрочное завершение сервера или клиента Рассмотрим, что произойдет в случае досрочного завершения клиента или сервера при использовании транспортного протокола TCP. Поскольку протокол UDP не подразумевает установку соединения, при завершении процесса его


Указание LPRng-сервера на стороне клиента

Из книги Цифровой журнал «Компьютерра» № 118 [23.04.2012 — 29.04.2012] автора Журнал «Компьютерра»

Указание LPRng-сервера на стороне клиента Файл /etc/printcap в системе LPRng используется аналогично одноименному файлу в системе BSD LPD. В частности, опции lp, rm и rp, которые обсуждались выше в данной главе, применимы как в BSD LPD, так и в LPRng. Большинство других опций также может


Определение сервера CUPS на стороне клиента

Из книги Компьютерра PDA N171 (28.04.2012-04.05.2012) автора Журнал «Компьютерра»

Определение сервера CUPS на стороне клиента Для добавления принтеров к системе CUPS используется утилита lpadmin, вызываемая из командной строки или доступная посредством специального графического интерфейса. Кроме того, эта задача может решаться с помощью Web-броузера; для


Хранение писем на стороне клиента и на стороне сервера

Из книги Наглядный самоучитель работы на нетбуке автора Сенкевич Г. Е.

Хранение писем на стороне клиента и на стороне сервера Как было сказано ранее, одна из функций сервера, реализующего протокол получения почты, состоит в том, чтобы хранить сообщения до тех пор, пока пользователь не обратится за ними. Когда клиент-программа обращается к


Взаимодействие клиента и сервера в системе X Window

Из книги Главный рубильник. Расцвет и гибель информационных империй от радио до интернета автора Ву Тим

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


Взаимодействие клиента и сервера VNC

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

Взаимодействие клиента и сервера VNC Излагая материал данной главы, я пытался обратить внимание на роль различных клиентских и серверных программ в процессе сетевого взаимодействия. Как вы уже знаете, один и тот же компьютер может действовать как сервер по одному


Создание резервной копии клиента Windows с помощью сервера Linux

Из книги Цифровая фотография. Трюки и эффекты автора Гурский Юрий Анатольевич

Создание резервной копии клиента Windows с помощью сервера Linux Резервное копирование, инициализируемое сервером, с применением Samba осуществляется почти так же, как и копирование по инициативе сервера с использованием NFS, но работа с продуктом Samba и системой Windows имеет ряд


Процессоры ARM: альтернативное будущее Олег Нечай

Из книги автора

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


Глава 1 Устройство мобильного компьютера

Из книги автора

Глава 1 Устройство мобильного компьютера Внешне все нетбуки очень похожи друг на друга. Основные отличия между разными моделями касаются размера экрана и некоторых технических характеристик внутренней «начинки».Кроме того, некоторые модели снабжены дополнительными


Глава 7 Постороннее устройство

Из книги автора

Глава 7 Постороннее устройство Генри Таттл значительную часть своей жизни провел на посту президента Hush-A-Phone Corporation, производящей устройства для приглушения голоса во время телефонных разговоров. Помимо Таттла, в штате компании числился лишь секретарь. Оба они работали в


8.9. Запуск клиента без запуска сервера

Из книги автора

8.9. Запуск клиента без запуска сервера Следующий сценарий, который мы рассмотрим, — это запуск клиента без запуска сервера. Если мы сделаем так и введем одну строку на стороне клиента, ничего не будет происходить. Клиент навсегда блокируется в своем вызове функции recvfrom,


Глава 3 Устройство цифровой камеры, цвет и «цифра»

Из книги автора

Глава 3 Устройство цифровой камеры, цвет и «цифра» 3.1. Матрица – «сердце» цифровой камеры3.2. Размеры и сжатие файлов3.3. Память камеры3.4. Питание3.5. LCD-монитор: увидеть, снять и сразу же оценить3.6. Цветовые модели3.7. Монитор и его настройка3.8. Как компьютер кодирует цвет3.9.