Ваш текст удалили из Википедии? Сохраните его на Викизнании или Вавилон-wiki!

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



Хочешь уточнить, добавить или исправить текст?
Редактировать статью