Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PUIS.docx
Скачиваний:
7
Добавлен:
03.12.2018
Размер:
1.01 Mб
Скачать

Контексты выполнения

Все операции, выполняемые системой, протекают в определенном контексте, причем зачастую более чем в одном. В аспекте взаимодействия программной системы с внешним миром можно выделить два важных контекста — запрос и сеанс. Запрос (request) соответствует отдельно взятому обращению к системе со стороны внешнего субъекта-клиента. Обработка запроса является прерогативой сервера; обычно подразумевается, что клиент, инициировавший запрос, ожидает ответа на него. При использовании некоторых протоколов клиенту разрешается прерывать запрос до получения ответа, но такие ситуации встречаются сравнительно редко. Чаще клиент имеет возможность послать другой запрос, противоречащий исходному (скажем, отправить запрос с заказом, а затем отменить заказ). По мнению клиента, связь двух запросов вполне очевидна, но конкретный протокол может и не донести эту информацию до сервера.

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

Программное обеспечение сервера корпоративных приложений может выступать в двух ипостасях — как сервер для клиента приложения и как клиент других систем. Поэтому нужно иметь в виду и возможность одновременного протекания нескольких сеансов с участием сервера (например, HTTP-сеанса с клиентом и сеанса взаимодействия с СУБД).

Рассмотрим другую пару понятий, происходящих из предметной области операционных систем, — «процесс» и «поток вычислений». Процесс (process) — это всеобъемлющий контекст выполнения, обеспечивающий высокий уровень изоляции охватываемых им данных от внешнего мира. Поток вычислений (thread) — более «легковесный» активный агент; в контексте одного процесса может функционировать целое множество потоков.

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

Одна из трудностей восприятия контекстов выполнения состоит в том, что они в действительности не упорядочены в такой степени, как того хотелось бы. В теории каждый сеанс должен быть связан исключительно с одним процессом на протяжении всего времени его протекания. Поскольку процессы в достаточной мере изолированы друг от друга, это могло бы снизить опасность возникновения конфликтов из-за параллелизма. На сегодня, однако, не известна ни одна серверная платформа, которая функционирует подобным образом. Ближайшая альтернатива связана с активизацией нового процесса для обработки каждого поступившего запроса; именно такая схема использовалась в ранних Web-системах, основанных на сценариях Perl. Сейчас ее стараются избегать, так как старт процесса сопряжен с расходованием избыточных ресурсов. Но обычной практикой является обработка процессом только одного запроса в каждый момент времени; это позволяет избавиться от многих проблем, обусловленных параллельным функционированием нескольких потоков.

При работе с системой баз данных следует различать еще один важный контекст выполнения — контекст транзакции (transaction). Транзакции способны соединять в себе несколько запросов, которые клиенту хотелось бы трактовать как единый запрос. Команды, составляющие транзакцию, могут быть адресованы приложением к СУБД (системные транзакции) или пользователем к приложению (бизнес-транзакции). Эти термины обсуждаются ниже.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]