Шаг 29.
Унифицированный язык моделирования UML.
Параллелизм

    На этом шаге рассмотрим один из типов дополнительных элементов объектной модели - параллелизм.

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

    Каждая программа имеет по крайней мере один поток управления, но в параллельной системе имеется много таких потоков: как кратковременные, так и долгосрочные. Реальная параллельность достигается только на многопроцессорных системах, а системы с одним процессором могут лишь имитировать параллельность за счет алгоритма разделения времени.

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

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

    Рассмотрим АКТИВНЫЙ_ДАТЧИК_ТЕПЕРАТУРЫ ActiveTemperatureSensor, который периодически измеряет температуру и сообщает клиенту о том, что она отклонилась от установленного значения на определенное количество градусов. Несмотря на то что реализация этого класса пока неизвестна, очевидно, что здесь требуется параллелизм.

    Существуют три подхода к параллелизму в объектно-ориентированном проектировании.

  1. Параллелизм — это внутреннее свойство некоторых языков программирования, имеющих механизмы параллельности и синхронизации. В данном случае можно создать активный объект, выполняющий некий процесс параллельно с другими объектами.
  2. Можно использовать библиотеку классов, реализующих какую-нибудь разновидность легковесных процессов. Естественно, такая реализация сильно зависит от платформы, хотя интерфейс библиотеки может быть универсальным. В этом случае параллелизм не является частью языка программирования (благодаря этому он не перегружает непаралелльные системы), а лишь выглядит таким, поскольку присутствует в стандартных классах.
  3. Параллелизм можно имитировать с помощью прерываний. Разумеется, для этого необходимы определенные знания низкоуровневого аппаратного обеспечения. Например, в реализации класса ActiveTemperatureSensor можно предусмотреть аппаратный таймер, периодически прерывающий выполнение приложения для того, чтобы все датчики измерили текущую температуру и активизировали свои функции обратного вызова.

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

    В параллельных системах недостаточно определить методы объекта - необходимо также принять меры для сбережения семантики этих методов в присутствии нескольких потоков управления.

    На следующем шаге рассмотрим персистентность.




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