Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Uml Book (Rus).doc
Скачиваний:
15
Добавлен:
11.08.2019
Размер:
58.74 Mб
Скачать

Стандартные элементы

Все механизмы расширения (см. главу 6) UML применимы в том числе и к ак­тивным классам. Чаще всего используются помеченные значения для расширения их свойств, например для специфицирования политики планирования активного класса.

В UML определены два стандартных (см. «Приложение В») стереотипа, при­менимых к активным классам:

  • process (процесс) - ресурсоемкий поток управления, который может вы­полняться параллельно с другими процессами;

  • thread (нить) - облегченный поток управления, который может выполнять­ся параллельно с другими нитями в рамках одного и того же процесса.

Различие между процессом и нитями связано с разными способами создания Потоков управления операционной системой, работающей на узле (см. главу 26), где размещается объект.

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

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

Коммуникация

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

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

Во-вторых, сообщение может быть передано от одного активного объекта друго­му активному. Здесь мы имеем случай межпроцессной коммуникации, которая мо­жет осуществляться двумя способами. В первом варианте некоторый активный объект может синхронно вызывать операцию другого (о событиях сигналов и вызо­вов см. главу 20). Такой способ имеет семантику рандеву (Rendezvous): вызываю­щий объект затребует выполнение операции и ждет, пока принимающая сторона получит вызов, выполнит операцию и вернет некоторый объект (если есть что воз­вращать); затем оба объекта продолжают работать независимо друг от друга. В те­чение всего времени выполнения вызова оба потока управления будут блокирова­ны. Во втором варианте один активный объект может асинхронно послать сигнал другому или вызвать его операцию. Семантика такого способа напоминает почто­вый ящик (Mailbox): вызывающая сторона посылает сигнал или вызывает опера­цию, после чего продолжает выполняться. Тем временем получающая сторона при­нимает сигнал или вызов, как только будет к этому готова. Пока она обрабатывает запрос, все вновь поступающие события или вызовы ставятся в очередь. Отреаги­ровав на запрос, принимающий объект продолжает свою работу. Семантика почто­вого ящика проявляется в том, что оба объекта не синхронизированы, просто один оставляет сообщение для другого.

В UML синхронное сообщение изображается полной стрелкой, а асинхронное - «полустрелкой» (см. рис. 22.2).

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

очень аккуратно моделировать синхронизацию потоков, о чем мы поговорим в сле­дующем разделе.

В-четвертых, пассивный объект может передавать сообщение активному. На первый взгляд это может показаться некорректным, но если вспомнить, что каж­дый поток управления принадлежит некоторому активному объекту, то становит­ся ясно, что передача пассивным объектом сообщения активному имеет ту же се­мантику, что и обмен сообщениями между двумя активными объектами.

Примечание С помощью ограничений (см. главу 6) можно моделировать различ­ные вариации посылки синхронных и асинхронных сообщений. Напри­мер, для моделирования отложенного рандеву (Balking rendezvous), имеющегося в языке Ada, можно воспользоваться синхронным сооб­щением с ограничением вида {wait= 0}, которое говорит о том, что вызывающий объект не будет дожидаться получателя. Можно смо­делировать и тайм-аут с помощью ограничения вида {wait = 1 ms}, которое говорит, что вызывающий объект будет ждать приема со­общения получателем не более одной миллисекунды.

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