Поточное программирование

За последние несколько дней я немного читал о программировании на основе потоков. Существует вики, которая предоставляет дополнительную информацию. И в Википедии тоже есть хороший обзор. Моей первой мыслью было: "Великий другой сторонник лего-ленд-ленд-программирования" - концепция, восходящая к концу 80-х годов. Но, как я читаю больше, я должен признать, что я заинтригован.

  1. Вы использовали FBP для реального проекта?
  2. Каково ваше мнение о FBP?
  3. Есть ли у FBP будущее?

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

10 ответов

Решение

Интересная дискуссия! Вчера мне пришло в голову, что часть этой путаницы может быть связана с тем фактом, что многие разные обозначения используют направленные дуги, но используют их для обозначения разных вещей. В FBP линии представляют ограниченные буферы, через которые проходят потоки пакетов данных. Поскольку компоненты, как правило, представляют собой долго выполняющиеся процессы, потоки могут содержать огромное количество пакетов, а приложения FBP могут работать очень долго - возможно, даже "постоянно" (см. Статью 2007 года о проекте под названием Eon, главным образом, людьми из UMass Amherst.). Поскольку отправка в ограниченный буфер приостанавливается, когда буфер (временно) заполнен (или временно пуст), неопределенные объемы данных могут быть обработаны с использованием ограниченных ресурсов.

Для сравнения, E в Grafcet происходит от Etapes, что означает "шаги", что является довольно другим понятием. В модели такого типа (а их там много), данные, проходящие между этапами, либо ограничены тем, что может храниться в высокоскоростной памяти за один раз, либо должны храниться на диске. FBP также поддерживает петли в сети, что трудно сделать в пошаговых системах - см., Например, http://www.jpaulmorrison.com/cgi-bin/wiki.pl?BrokerageApplication - обратите внимание, что это приложение использовало как MQSeries, так и CORBA естественным образом. Кроме того, FBP изначально параллелен, поэтому он пригоден для программирования грид-сетей, многоядерных машин и ряда направлений современных вычислений. Последний комментарий: в литературе я нашел много связанных проектов, но лишь немногие из них имеют все характеристики FBP. Список, который я накопил за эти годы (ряд из них ближе, чем Grafcet), можно найти в http://www.jpaulmorrison.com/cgi-bin/wiki.pl?FlowLikeProjects.

1. Использовали ли вы FBP для реального проекта?

Мы разработали и внедрили сервер DF для нашего проекта автоматизации (диспетчер, интерфейс компонентов, набор компонентов, язык DF, компилятор DF, пользовательский интерфейс). Он написан на голом C++ и работает на нескольких Unix-подобных системах (Linux x86, MIPS, avr32 и т. Д., Mac OSX). В нем отсутствуют некоторые функции, например, сложное управление потоком, сложное управление потоками (для него есть только не слишком продвинутый компонент), так что это всего лишь прототип, даже он работает. Сейчас мы работаем над полнофункциональным сервером. Мы многому научились при реализации и использовании прототипа.

Также мы сделаем визуальный редактор когда-нибудь.

2. Каково ваше мнение о FBP?

2.1. Во-первых, программирование потоков данных - это настоящее удовольствие

Когда я познакомился с программированием потоков данных, мне казалось, что 20 лет назад я впервые познакомился с программированием. Хотя DF-программирование отличается от процедурного / ООП-программирования, это всего лишь разновидность программирования. Есть много вещей, чтобы обнаружить, даже так просто! Это очень забавно, когда, будучи опытным программистом, вы столкнулись с проблемой DF, которая является очень-очень простой вещью, но раньше она была для вас совершенно неизвестна. Итак, если вы перейдете к программированию DF, вы почувствуете себя новичком-программистом, который первым выполнил "цикл" или "условие".

2.2. Может использоваться только для определенных архитектур

Это просто молоток, который предназначен для забивания гвоздей. DF не подходит для пользовательского интерфейса, веб-сервера и так далее.

2,3. Архитектура потока данных оптимальна для некоторых задач

Каркас потока данных может создавать магические вещи. Он может паралеллизировать процедуры, которые изначально не предназначены для паралеллизации. Компоненты являются однопоточными, но когда они организованы в граф DF, они становятся многопоточными.

Пример: знаете ли вы, что make является системой DF? Попробуйте make -j (посмотрите, для чего используется -j). Если у вас многоядерный компьютер, скомпилируйте ваш проект с -j и без, и сравните время.

2,4. Оптимальное разделение проблемы

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

DF архитектура разбивает вашу проблему очень интересным способом:

  • структура потока данных, которая обеспечивает архитектуру (просто используйте существующую),
  • компоненты: программист создает компоненты; компоненты - это простые, хорошо разделенные блоки - компоненты легко изготовить;
  • конфигурация: иначе говоря, программирование потока данных: конфигуратор объединяет график потока данных (программу), используя компоненты, предоставляемые программистом.

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

2.5. скорость

Если система построена на собственных компонентах, программа DF работает быстро. Единственная потеря времени - отправка сообщений между компонентами по сравнению с простой ООП-программой, она также минимальна.

3. Есть ли у FBP будущее?

Да, конечно.

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

Кроме того, это очень экономично. Если у вас есть хороший набор компонентов, вам нужно только собрать кирпичи lego. Программа DF проста в обслуживании. Для создания конфигурации DF не требуется опытный программист, просто системный интегратор.

Я был бы счастлив, если бы родные системы распространялись, с открытыми дверями для создания пользовательских компонентов. Также должен быть стандартный язык DF, что означает, что он может использоваться с независимыми от платформы визуальными редакторами и несколькими серверами DF.

Я должен не согласиться с комментарием о том, что FBP является просто средством реализации FSM: я думаю, что FSM аккуратны, и я считаю, что они играют определенную роль в создании приложений, но основная концепция FBP состоит в том, что многокомпонентные процессы работают асинхронно, общение посредством потоков данных, проходящих через так называемые ограниченные буферы. Да, безусловно, автоматы являются одним из способов построения процессов компонентов, и на самом деле в моей книге есть целая глава, посвященная FBP, посвященная этой идее, и связанная с этим КПК ( 1) - http://www.jpaulmorrison.com/fbp/compil.htm - но, на мой взгляд, FSM, реализующий нетривиальную сеть FBP, был бы невероятно сложным. В качестве примера приведена диаграмма http://www.jpaulmorrison.com/fbp/image010.jpgсоставляет около 1/3 одного пакетного задания, выполняемого на мэйнфрейме. Каждый из этих блоков работает асинхронно со всеми остальными. Кстати, мне было бы очень интересно услышать больше ответов на вопросы в первом посте!

1: http://en.wikipedia.org/wiki/Pushdown_automaton нажатием

Всякий раз, когда я слышу термин "потоковое программирование", я концептуально думаю о LabView. Т.е. процессы компонентов, планирование которых обусловлено, прежде всего, изменением входных данных. Это действительно ЛЕГО программирование в том смысле, что платформа labview использовалась для новейших продуктов mindstorm. Однако я не согласен с тем, что это делает его менее полезной моделью программирования.

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

Один вопрос, который мне никогда не приходилось задавать при просмотре приложения, написанного в labview, - "Какая часть кода задает это значение?", Поскольку это было присуще и легко отслеживалось в обратном направлении от данных, а также ошибки, подобные нескольким незапланированным авторам, было невозможно создать по ошибке.

Если бы только это было верно для кода, написанного более типичным процедурным способом!

1) Я создаю небольшую инфраструктуру FBP для проекта обнаружения аномалий, и это оказалось хорошей идеей.

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

Тем не менее, безусловно, лучшим примером потокового программирования являются каналы UNIX, которые являются одной из старейших и наиболее игнорируемых сред FBP. Я не думаю, что мне нужно подробно останавливаться на мощности труб NIX...

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

3) Абсолютно! Трубы здесь, чтобы остаться, и являются одной из самых мощных функций Unix. Мощь, присущая инфраструктуре FBP по сравнению со статической программой, многочисленна и упрощает изменения до такой степени, что некоторые инфраструктуры могут быть перенастроены без каких-либо специальных мер.

FBP FTW! ;-)

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

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

Благодаря встроенному ведению журналов и обращению к каталогу, чтобы произвести понятный анализ, вещи могут стать действительно продуктивными. У меня есть реальный мировой опыт разработки коммерческих продуктов таким образом. Я заинтересован в дальнейшем развитии, особенно в том, что касается инструментов и IDE. К сожалению, я думаю, что многие в автомобильном секторе упустили момент о том, как это здорово, и не смогли развить это. Теперь их отвлекли другие причуды, и они не смогли осознать, что большая часть развития была гораздо больше, чем физическая шина.

Я понимаю, что это не совсем то же самое, но эта модель годами использовалась в программировании ПЛК. ISO называет это последовательной блок-схемой, но многие люди называют ее Grafcet после популярной реализации. Он предлагает параллельную обработку и определяет переходы между состояниями.

Я широко использовал Spring Web Flow в веб-приложениях Java для моделирования (как правило) процессов приложений, которые, как правило, являются сложными делами, похожими на работу мастера, с большим количеством условной логики относительно того, какие страницы отображать. Это невероятно мощный. Был добавлен новый продукт, и мне удалось за один или два часа преобразовать существующие части в совершенно новый процесс приложения (с добавлением пары новых представлений / состояний).

Я также изучал возможность использования ОС Workflow для моделирования бизнес-процессов, но этот проект был закрыт по разным причинам.

В мире Microsoft у вас есть Windows Workflow Foundation ("WWF"), который становится все более популярным, особенно в сочетании с Sharepoint.

FBP - это просто средство реализации конечного автомата. В этом нет ничего нового.

В наши дни он используется в мире бизнес-аналитики для объединения и обработки данных. Конечные пользователи могут выполнять такие этапы обработки данных, как ETL, запросы, присоединение и создание отчетов. Я разработчик в открытой системе - http://composableanalytics.com/. В CA приложения, основанные на потоке, могут совместно использоваться и выполняться через браузер.

Для этого предназначены серии MQ, MSMQ и JMS.

Это краеугольный камень реализации Web-сервисов и Enterprise Service Bus.

Такие продукты, как TIBCO и Sun JCAPS, в основном основаны на потоках без использования этого конкретного модного слова.

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

Другие вопросы по тегам