Parallel-Ax

Из проекта Викизнание

Parallel-Ax — архитектура параллельного асинхронного программирования, позволяющая безопасно и эффективно использовать многопоточность.

Оглавление

История

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

В качестве возможных решений проблемы, выдвигались различные способы. Например функциональный язык программирования F#, который впервые вводится в интегрированную среду разработки MS Visual Studio 2010, объявляет о решении данной проблемы. Суть его сводится к тому, что функциональном программирование характеризуется отсутствием переменных, сохраняющих свое состояние. А именно такие переменные и являются "главным источником бед" в многопоточной среде. Раз нет таких переменных, то и проблемы, стало быть, тоже нет. Однако функциональное программирование имеет свои недостатки, поэтому многие продолжают искать решение в другой плоскости, без урезания возможностей в языке программирования.

Основные положения

Используемые концепции

Программная архитектура Parallel-Ax использует концепции объектно-ориентированного программирования и систем, основанных на обмене сообщениями.

Описание архитектуры

Модель программирования.

Parallel-Ax предлагает такую модель программирования, при которой каждая подсистема - может выполняться в своем потоке. При этом подсистемы связываются между собой посредством системы обмена сообщениями. Благодаря чему в системе нет данных, разделяемых между несколькими потоками. Что и позволяет говорить о поточно-безопасной концепции программирования.

Масштабируемость, разделение выполнения на множество потоков.

Архитектура разрабатываемого приложения должна обладать следующими свойствами:

  • Разделение Системы на отдельные подсистемы. Архитектурное решение может включать в себя и паттерн "Уровень служб" (Service Layer) и др., это только общая абстракция, что все должно быть разбито на отдельные подсистемы.
  • Каждая подсистема должна "дробиться" на еще более мелкие подсистемы.
  • "Мелкограннулированность", в итоге, всего приложения.
  • Динамическое назначение числа потоков, которые будут обслуживать конкретную подсистему.
  • Чем больше имеется в наличии свободных потоков, тем больше их может быть назначено для обслуживания конкретной подсистемы. При этом сама подсистема будет обслуживаться одним потоком. "Оставшиеся", назначенные для этой подсистемы потоки - будут брать на себя более мелкие подсистемы, из которых состоит данная подсистема.


Рекомендации к использованию.

Очень желательно, чтобы была удобная и высокоэффективная система обмена сообщениями. Например это может достигаться посредством аннотаций, "помечающих" методы, как слушателей конкретных событий (тип слушаемого события и параметры его - указываются как параметры к данной аннотации, или другими способами). Это может достигаться высокоэффективной системой сообщений, которая есть у фреймворка JBoss Seam, в котором используется двунаправленная инъекция Bijection (для высокоэффективной поддержки паттерна IoC). Примеры:

// ClassA

@Observer("newBookCreated")
public void onBookCreated(Book book)
{
    // выполнение логики обработки события newBookCreated
}
// ClassB
private void createBook() { Book book = new Book(); events.raiseEvent("newBookCreated", book); }


- все это позволяет легко и удобно как разрабатывать такую "мелкограннулированную" систему, так и изменять / поддерживать ее.

Другими словами, такие фреймворки, как JBoss Seam - уже "морально готовы", чтобы использовать архитектуру Parallel-Ax.

Права и ограничения

Данная архитектура придумана Евгением Николаевым (03.09.2009). Распространяется под BSD Public Documentation License.

Литература

  1. Мартин Фаулер. Архитектура корпоративных программных приложений (Patterns of Enterprise Application Architecture). Исправленное издание. «Вильямс», 2006 г., стр. 544, ISBN 5-8459-0579-6
  1. Грегор Хоп. Бобби Вульф. Шаблоны интеграции корпоративных приложений. Проектирование, создание и развертывание решений, основанных на обмене сообщениями (Enterprise Intergration Patterns). «Вильямс», 2007 г., стр. 672, ISBN 978-5-8459-1146-9