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

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

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

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

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

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

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

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

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

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