Шаг 182.
Унифицированный язык моделирования UML.
Активные объекты, потоки и процессы

    На этом шаге рассмотрим понятие активного объекта, потока и процесса в UML.

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

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

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

    В UML каждый независимый поток управления моделируется в виде активного объекта. Активный объект – это процесс или поток, способные инициировать управляющее воздействие. Как и любой другой объект, активный объект может быть экземпляром класса. В таком случае говорят, что он является экземпляром активного класса. Подобно прочим объектам, активные объекты могут общаться друг с другом, посылая сообщения, хотя в данном случае передача сообщений должна быть дополнена семантикой параллелизма, чтобы облегчить взаимодействие независимых потоков управления.

    Многие языки программирования непосредственно поддерживают концепцию активного объекта. В языки Java, Smalltalk и Ada параллелизм встроен. С++ поддерживает параллелизм за счет различных библиотек, в основе которых лежат механизмы параллелизма, обеспечиваемые операционной системой. Применение UML для визуализации, специфицирования, конструирования и документирования этих абстракций необходимо потому, что без него почти невозможно рассуждать о параллелизме, обмене информацией и синхронизации.

    Графическое представление активного класса, принятое в UML, отражено на рис. 1.


Рис.1. Активный класс

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

    Активный объект (active object) – это объект, который владеет процессом или потоком и может инициировать управляющее воздействие.

    Активный класс (active class) – это класс, экземплярами которого являются активные объекты. Изображается в виде прямоугольника с утолщенными боковыми границами (см. рис. 1).

    Процесс (process) – это ресурсоемкий поток управления, который может выполняться параллельно с другими процессами.

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

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

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

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

    Активный класс в UML используется для представления процесса или потока, в контексте которого выполняется независимый поток управления, работающий параллельно с другими, пользующимися равными с ним правами.

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

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

    Активные классы применяются для моделирования семейств процессов или потоков. На практике это означает, что активный объект – экземпляр активного классификатора – материализует процесс или поток. При моделировании параллельных систем с помощью активных объектов вы присваиваете имя каждому независимому потоку управления. В результате создания активного объекта запускается ассоциированный с ним поток управления; после уничтожения объекта этот поток завершается.

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

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

    Если же говорить об автоматах, то как активные, так и пассивные объекты могут посылать и получать события сигналов и вызовов.

    На следующем шаге рассмотрим коммуникацию объектов.




Предыдущий шаг Содержание Следующий шаг