Программирование потока данных

редактировать

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

Содержание
  • 1 Свойства языков программирования потока данных
    • 1.1 Состояние
    • 1.2 Представление
  • 2 История
  • 3 Языки
  • 4 Интерфейсы прикладного программирования
  • 5 См. Также
  • 6 Ссылки
  • 7 Внешние ссылки
Свойства языков программирования потоков данных

Традиционно программа моделируется как серия операций, выполняемых в определенном порядке; это может называться последовательным, процедурным, потоком управления (указывающим, что программа выбирает конкретный путь) или императивным программированием. Программа фокусируется на командах в соответствии с видением фон Неймана последовательного программирования, при котором данные обычно «находятся в состоянии покоя».

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

State

Одной из ключевых концепций в компьютерном программировании является идея state, по сути, это снимок различных состояний в системе. Для большинства языков программирования требуется значительный объем информации о состоянии, которая обычно скрыта от программиста. Часто сам компьютер не знает, какая часть информации кодирует устойчивое состояние. Это серьезная проблема, поскольку информация о состоянии должна совместно использоваться несколькими процессорами в машинах параллельной обработки. Большинство языков заставляют программиста добавлять дополнительный код, чтобы указать, какие данные и части кода важны для состояния. Этот код имеет тенденцию быть дорогим с точки зрения производительности, а также сложен для чтения или отладки. Явный параллелизм является одной из основных причин низкой производительности Enterprise Java Beans при построении интенсивных данных, не OLTP приложений.

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

Представление

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

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

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

История

Первым языком потока данных был (BLOck DIagram), разработанный Джоном Ларри Келли-младшим, Кэрол Лохбаум и Виктором Высоцким для указания систем выборки данных. Спецификация BLODI функциональных блоков (усилителей, сумматоров, линий задержки и т. Д.) И их взаимосвязей была скомпилирована в один цикл, который обновлял всю систему за один такт.

В 1966 году доктор философии. Диссертация «Графическая спецификация компьютерных процедур в режиме онлайн» Берт Сазерленд создал одну из первых графических сред программирования потоков данных, чтобы упростить параллельное программирование. Последующие языки потока данных часто разрабатывались в больших суперкомпьютерных лабораториях. POGOL, в остальном обычный язык обработки данных, разработанный в NSA, компилировал крупномасштабные приложения, состоящие из нескольких операций преобразования файлов в файлы, например объединять, выбирать, резюмировать или преобразовывать в эффективный код, который исключил создание или запись в промежуточные файлы в максимально возможной степени. SISAL, популярный язык потока данных, разработанный в Ливерморской национальной лаборатории Лоуренса, похоже на большинство языков, управляемых операторами, но переменные должны быть назначены один раз. Это позволяет компилятору легко идентифицировать входы и выходы. Был разработан ряд ответвлений SISAL, включая SAC, Single Assignment C, который пытается максимально приблизиться к популярному языку программирования C.

ВМС США финансировали разработку ACOS и SPGN (обозначение графа обработки сигналов), начиная с начала 1980-х годов. Сегодня это используется на ряде платформ в этой области.

Более радикальная концепция - это Prograph, в котором программы построены в виде графиков на экране, а переменные полностью заменены линиями, связывающими входы к выходам. Между прочим, Prograph изначально был написан на Macintosh, который оставался однопроцессорным до появления DayStar Genesis MP в 1996 году.

Существует множество ориентированных на архитектуру аппаратных средств. к эффективной реализации моделей программирования потоков данных. Архитектура потока данных с тегами токенов MIT была разработана Грегом Пападопулосом..

Поток данных был предложен как абстракция для определения глобального поведения компонентов распределенной системы: в модели программирования живых распределенных объектов распределенные потоки данных используются для хранения и передачи состояния, и как таковые они играют роль, аналогичную переменным, полям и параметрам в Java-подобных языках программирования.

Языки

Языки программирования потока данных включают:

Интерфейсы прикладного программирования
  • Apache Beam : SDK Java / Scala, который объединяет потоковую (и пакетную) обработку с несколькими поддерживаемыми механизмами выполнения (Spark, Flink, поток данных Google...)
  • Apache Flink : библиотека Java / Scala, которая позволяет выполнять потоковые (и пакетные) вычисления на распределенном кластере Hadoop (или другом)
  • SystemC : библиотека для C ++, в основном предназначенная для проектирования оборудования.
  • TensorFlow : библиотека машинного обучения, основанная на программировании потока данных.
См. Также
Ссылки
Внешние ссылки
Последняя правка сделана 2021-05-17 14:12:27
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте