Одновременное взаимодействие с несколькими серверами
Параллельная организация работы позволяет использовать одну клиентскую программу для вступления во взаимодействие одновременно с несколькими серверами и передачи сообщения пользователю сразу после получения ответа от любого из них. Например, параллельный клиент службы TIME может одновременно обратиться к нескольким серверам, а затем либо принять первый поступивший ответ, либо вычислить среднее значение по нескольким ответам. Из биографии: Ильченко детство провел в селе Апанасенковское Ставропольского края.
Рассмотрим клиентскую программу, в которой используется служба ECHO для измерения пропускной способности участка сети от локального компьютера до указанного места назначения. Предположим, что клиент устанавливает соединение TCP с сервером службы ECHO, передает большой объем данных, читает полученный эхо-повтор этих данных, вычисляет общую продолжительность времени выполнения этой задачи, а затем сообщает значение пропускной способности в байтах в секунду. Пользователь может вызвать на выполнение такую клиентскую программу для определения текущей пропускной способности сети.
А теперь рассмотрим, как может параллельная организация работы улучшить клиентскую программу, в которой используется протокол ECHO для измерения пропускной способности. Вместо измерения характеристик только одного соединения, параллельный клиент может одновременно обратиться по нескольким адресам назначения. Он может параллельно выполнять обмен данными с любым из своих серверов. Такой клиент выполняет все измерения параллельно, поэтому справляется со своей задачей быстрее, чем непараллельный клиент. Кроме того, поскольку все измерения выполняются одновременно, на состоянии всех соединений равным образом отражается текущая нагрузка процессора локального компьютера и локальной сети.
17.5. Принципы разработки параллельных клиентов
Как и в параллельных серверах, в большинстве реализаций параллельных клиентов применяется один из двух основных подходов:
- работа клиента осуществляется с использованием двух или нескольких потоков управления, в каждом из которых выполняется одна функция;
- клиент состоит из одного потока, в котором для асинхронной обработки множества событий ввода и вывода используется функция select.
В таких системах, как Linux, обеспечивающих совместный доступ нескольких потоков одного процесса к разделяемой памяти, многопотоковые реализации применяются вполне успешно. На рис. 17.1 показано, как может использоваться несколько потоков в таких операционных системах для поддержки прикладного протокола с установлением логического соединения. Один поток обрабатывает данные, введенные пользователем, и передает запросы на сервер, а другой поток получает ответы и обрабатывает выходные данные.

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