Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы_РСОИ.doc
Скачиваний:
51
Добавлен:
21.12.2018
Размер:
1.23 Mб
Скачать
  1. Процессы. Потоки выполнения

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

Потоки выполнения

Для выполнения программ операционная система создает несколько виртуальных процессоров, по одному для каждой программы. Чтобы отслеживать эти виртуальные процессоры, операционная система поддерживает таблицу

процессов (process table), содержащую записи для сохранения значений регистров процессора, карт памяти, открытых файлов, учетных записях пользователей, привилегиях и т. п. Процесс (process) часто определяют как выполняемую программу, то есть программу, которая в настоящее время выполняется на одном из виртуальных процессоров операционной системы. Следует отметить, что операционная система уделяет огромное внимание прозрачности, чтобы один процесс не нарушил работу другого процесса.

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

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

Многопоточные клиенты

Чтобы добиться высокой степени прозрачности распределения, распределенные системы, работающие в глобальных сетях, могут нуждаться в маскировке больших задержек сообщений, курсирующих между процессами. Цикл задержки в глобальных сетях легко может достигать порядка сотен миллисекунд, а временами и секунд.

Традиционный способ скрыть задержки связи инициировав взаимодействие,

немедленно перейти к другой работе. Типичным примером применения этой методики являются web-браузеры. Во многих случаях web-документ, содержащийся в файле формата HTML, содержит, кроме текста, набор изображений, значков и т. п. Для получения элементов web-документа браузер открывает соединение TCP/IP, читает поступающие данные и преобразует их в компоненты визуального представления. Web-браузер обычно сначала получает страницу HTML-кода, а затем показывает ее. Для того чтобы по возможности скрыть задержки связи, некоторые браузеры начинают показывать данные по мере их получения. В результате мы видим, что web-браузер выполняет несколько задач одновременно. Понятно, что разработка браузера в виде многопоточного клиента весьма упрощает это занятие. Как только мы получаем основной файл HTML, активизируются отдельные потоки выполнения, отвечающие за дозагрузку других частей страницы. Каждый из потоков выполнения создает отдельное соединение с сервером и получает от него данные.

Многопоточные серверы

Чтобы ощутить достоинства потоков выполнения для написания кода серверов,

рассмотрим организацию файлового сервера, который периодически оказывается блокированным ожиданием диска. Файловый сервер обычно ожидает входящего запроса на операции с файлами, после чего обрабатывает полученный запрос и возвращает ответ. Одна из возможных и особо популярных организаций, когда один из потоков выполнения, диспетчер, считывает приходящие запросы на файловые операции. Запросы посылаются клиентами с указанием конечной точки данного сервера. После проверки запроса сервер выбирает (то есть блокирует) находящийся в состоянии ожидания

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