2011-12-22 3 views
1

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

Я ищу подходящую архитектуру или шаблоны проектирования для этого приложения. Я прочитал Pattern-Oriented Software Architecture: Patterns for Concurrent and Networked Objects (POSA2) и его примерный код с веб-сайта автора.

Но все-таки я не могу решить, какой шаблон дизайна (ы) будет уместно для приложения среди

  • Лидер/Последователь
  • Half-Sync/Half-Async
  • реактор
  • Proactor
  • Активный объект

Может кто-нибудь дать подсказку или DVICE?

+0

@CesarCanassa Мы используем C++ на платформе Windows, –

+0

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

+0

Итак, Пол, когда вы/узнаете, что можете/можете видеть в будущем? И почему вы еще не ответили на этот вопрос? –

ответ

1

За POSA2, я думаю, вы можете найти эти полезные:

Язык Образца для параллельного программирования http://www.cise.ufl.edu/research/ParallelPatterns/

Также рекомендуем соответствующую книгу: «Шаблоны для параллельного программирования» Тимоти Г. Маттсона, Беверли А. Сандерс, Берн Л. Massingill

Ресурсы по параллельному Patterns http://www.cs.uiuc.edu/homes/snir/PPP/

Учитывая, что вы используете C++ на Windows, вы должны реально смотреть на PPL:

Параллельное программирование с использованием Microsoft Visual C++ Design Patterns для разложения и координации на многоядерных архитектурах Колин Кэмпбелл, Ade Миллер http://parallelpatternscpp.codeplex.com/

Вы можете прочитать всю книгу (свободно) через MSDN: http://msdn.microsoft.com/en-us/library/gg675934.aspx

в частности, посмотрите раздел на «Выбор правильного паттерна» здесь: http://msdn.microsoft.com/en-us/library/gg663528.aspx

К быстро сравнивая ваши требования и рекомендации в этом разделе, я думаю, что модель трубопровода (глава 7) может быть хороший матч:

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

Подробнее:.. http://msdn.microsoft.com/en-us/library/gg663538.aspx

+0

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

+0

Я вижу. Разница между реактором и проактором сводится к синхронности обработки: «Данные, поступающие с различных датчиков», звучат как «несколько запросов на обслуживание». Совпадает ли совпадающая часть? Если это так, вопрос заключается в том, улучшает ли синхронная или асинхронная обработка запросов ваше приложение: Схема реактора - В приложениях, управляемых событиями, которые одновременно обрабатывают несколько запросов на обслуживание, но обрабатывают их синхронно и последовательно. Proactor pattern - Приложение, управляемое событиями, которое получает и обрабатывает несколько запросов асинхронно. – Matt

+0

В то же время - согласно http://www.artima.com/articles/io_design_patterns2.html - «ACE Proactor обеспечивает гораздо лучшую производительность и надежность в MS-Windows, поскольку Windows предоставляет очень эффективный асинхронный API, основанной на поддержке на уровне операционной системы ». – Matt

Смежные вопросы