Оценка результатов применения параллельной организации работы в приведенном выше примере кода
Параллельная реализация программы TCPtecho улучшает ее работу в двух отношениях. Во-первых, параллельная реализация позволяет получить более точные результаты измерения количества времени, которое потребовалось для передачи данных в каждом соединении, поскольку пропускная способность всех соединений измерялась в течение одного и того же интервала времени. Поэтому при появлении затора в сети он равным образом воздействует на все соединения. Во-вторых, параллельная реализация повышает привлекательность программы TCPtecho для пользователя. Чтобы понять, с чем это связано, снова рассмотрим результаты, полученные при второй попытке. Для получения ответа от компьютера arthur потребовалось чуть больше половины секунды, сообщение от компьютера merlin было получено примерно через пять секунд, а последнее сообщение, от компьютера ector, появилось примерно через двенадцать секунд. Если бы пользователю пришлось ждать последовательного выполнения всех проверок, то общее время выполнения программы заняло бы примерно восемнадцать секунд. Измерение характеристик компьютеров, расположенных на большем удалении в Internet, в отдельных случаях потребует значительно более продолжительного ожидания, поэтому параллельная версия позволяет получить результаты гораздо быстрее. Во многих случаях применение последовательной реализации клиента для выполнения N измерений характеристик связи может потребовать примерно в N раз больше времени по сравнению с параллельной версией. Хоть компания Dell и выпустила на рынок свой ультрабук одной из последних.
17.10. Резюме
Параллельная организация работы предоставляет мощное инструментальное средство, которое может использоваться не только в серверах, но и в клиентах. Параллельные версии клиентов могут обеспечить более быстрое время отклика, а также исключить проблемы тупиковых ситуаций. И наконец, распараллеливание работы позволяет отделить функции управления и обработки информации о состоянии от обычного ввода и вывода.
В настоящей главе рассматривался пример клиента с установлением логического соединения, в котором измеряется время, необходимое для доступа к серверам службы ECHO на одном или нескольких компьютерах. Поскольку этот клиент обеспечивает параллельную поддержку нескольких соединений, он позволяет исключить из рассмотрения различия в пропускной способности, вызванные изменением состояния сети (например, в результате затора), поскольку все измерения выполняются в течение одного и того же интервала времени. Параллельная реализация привлекательна и для пользователей, поскольку в ней все измерения совмещены, т.е. пользователь не должен выполнять их последовательно.
Упражнения
- Обратите внимание, что в приведенном примере клиентской программы проверка готовности дескрипторов файлов происходит последовательно. Если несколько дескрипторов одновременно переходят в состояние готовности, клиент вначале обрабатывает дескрипторы с меньшими номерами, а затем проходит в цикле по остальным. После обработки всех готовых дескрипторов он снова вызывает функцию select для перехода в состояние ожидания готовности другие дескрипторов. Рассмотрим, сколько времени проходит между обработкой готового дескриптора и вызовом функции select. После обработки дескрипторов с более высокими номерами проходит меньше времени, чем после обработки дескрипторов с меньшими номерами. Может ли это различие привести к нарушению работы некоторых потоков из-за нехватки ресурсов? Объясните ваш ответ.
- Доработайте представленную в качестве примера клиентскую программу для предотвращения неравноправного подхода к обработке дескрипторов, показанного в предыдущем упражнении.
- Для каждого из проектов последовательных и параллельных клиентов, описанных в этой главе, напишите выражение, которое определяет максимальное число используемых сокетов.