Парадигмы программирования |
---|
|
В компьютерном программировании , программирование потоков данных является парадигма программирования , которая моделирует программу в виде ориентированного графа данных , протекающих между операциями, таким образом , реализации потоков данных принципов и архитектуры. Языки программирования потоков данных имеют общие черты с функциональными языками и, как правило, были разработаны для того, чтобы привнести некоторые функциональные концепции в язык, более подходящий для обработки чисел. Некоторые авторы используют термин поток данных вместо потока данных, чтобы избежать путаницы с вычислением потока данных или архитектурой потока данных., основанный на парадигме недетерминированных машин. Программирование потока данных было впервые предложено Джеком Деннисом и его аспирантами Массачусетского технологического института в 1960-х годах.
Свойства языков программирования потока данных [ править ]
Традиционно программа моделируется как серия операций, выполняемых в определенном порядке; это может упоминаться как последовательные, [1] : стр.3 процедурные, [2] управление потоком [2] ( с указанием , что программа выбирает конкретный путь), или императивное программирование . Программа фокусируется на командах в соответствии с видением фон Неймана [1] : стр. 3 последовательного программирования, при котором данные обычно находятся в состоянии покоя. [2] : стр.7
Напротив, программирование потока данных подчеркивает движение данных и моделирует программы как серию соединений. Явно определенные входы и выходы соединяют операции, которые работают как черные ящики . [2] : p.2 Операция запускается, как только все ее входные данные становятся действительными. [3] Таким образом, языки потоков данных по своей сути параллельны и могут хорошо работать в больших децентрализованных системах. [1] : стр.3 [4] [5]
Состояние [ править ]
Одна из ключевых концепций компьютерного программирования - это идея состояния , по сути, снимка различных состояний в системе. Большинство языков программирования требуют значительного количества информации о состоянии, которая обычно скрыта от программиста. Часто компьютер сам не знает, какая часть информации кодирует устойчивое состояние. Это серьезная проблема, поскольку информация о состоянии должна совместно использоваться несколькими процессорами на машинах с параллельной обработкой . Большинство языков заставляют программиста добавлять дополнительный код, чтобы указать, какие данные и части кода важны для состояния. Этот код имеет тенденцию быть дорогим с точки зрения производительности, а также сложен для чтения или отладки. Явный параллелизмявляется одной из основных причин низкой производительности Enterprise Java Beans при создании приложений , не использующих OLTP, с интенсивным использованием данных. [ необходима цитата ]
В то время как последовательную программу можно представить как одного рабочего, перемещающегося между задачами (операциями), программа потока данных больше похожа на серию рабочих на сборочной линии , каждый из которых выполняет определенную задачу всякий раз, когда доступны материалы. Поскольку операции касаются только доступности входных данных, они не имеют скрытого состояния, которое нужно отслеживать, и все они «готовы» одновременно.
Представление [ править ]
Программы потока данных представлены по-разному. Традиционная программа обычно представлена в виде серии текстовых инструкций, что разумно для описания последовательной системы, которая передает данные между небольшими одноцелевыми инструментами, которые получают, обрабатывают и возвращают. Программы потока данных начинаются с ввода, возможно, с параметров командной строки , и демонстрируют, как эти данные используются и изменяются. Поток данных явный, часто визуально изображается в виде линии или конвейера.
С точки зрения кодирования, программа потока данных может быть реализована в виде хеш-таблицы с однозначно идентифицированными входными данными в качестве ключей, используемых для поиска указателей на инструкции. Когда любая операция завершается, программа просматривает список операций, пока не найдет первую операцию, в которой все входные данные в настоящее время действительны, и запустит ее. Когда эта операция завершается, она обычно выводит данные, тем самым делая другую операцию действительной.
Для параллельной работы требуется общий доступ только к списку; это состояние всей программы. Таким образом, задача поддержания состояния снимается с программиста и передается среде выполнения языка . На машинах с одним ядром процессора, где реализация, предназначенная для параллельной работы, просто привела бы к накладным расходам, эти накладные расходы можно полностью устранить, используя другую среду выполнения.
История [ править ]
Первым языком потока данных стал BLODI (BLOck DIagram), разработанный Джоном Ларри Келли-младшим , Кэрол Лохбаум и Виктором Высоцким для определения систем выборочных данных . [6] Спецификация BLODI функциональных блоков (усилителей, сумматоров, линий задержки и т. Д.) И их взаимосвязей была скомпилирована в один цикл, который обновлял всю систему за один такт.
В 1966 году доктор философии. Тезис, он-лайн Графическое описание процедур Компьютера , [7] Bert Сазерленд создал одну из первых графических основ программирования потоков данных для того , чтобы сделать параллельное программирование проще. Последующие языки потока данных часто разрабатывались в крупных суперкомпьютерных лабораториях. POGOL, в остальном традиционный язык обработки данных, разработанный в NSA , компилировал крупномасштабные приложения, состоящие из нескольких операций «файл-файл», например слияния, выбора, суммирования или преобразования, в эффективный код, который исключал создание или запись промежуточных файлы в максимально возможной степени. [8] SISAL , популярный язык обработки данных, разработанный вНациональная лаборатория Лоуренса Ливермора похожа на большинство языков, ориентированных на утверждения, но переменные следует назначать один раз . Это позволяет компилятору легко идентифицировать входы и выходы. Ряд отстоящих SISAL были разработаны, в том числе SAC , Single Assignment C , который пытается оставаться рядом с популярным языком программирования С , как это возможно.
ВМС США финансировали разработку ACOS и SPGN (обозначение графа обработки сигналов), начиная с начала 1980-х годов. Сегодня это используется на нескольких платформах в полевых условиях. [9]
Более радикальная концепция - это Prograph , в котором программы строятся в виде графиков на экране, а переменные полностью заменяются линиями, связывающими входы с выходами. Кстати, Prograph изначально был написан для Macintosh , который оставался однопроцессорным до появления DayStar Genesis MP в 1996 году.
Существует множество аппаратных архитектур, ориентированных на эффективную реализацию моделей программирования потоков данных. Архитектура потока данных с тегированным токеном Массачусетского технологического института была разработана Грегом Пападопулосом .
Поток данных был предложен как абстракция для определения глобального поведения компонентов распределенной системы: в модели программирования живых распределенных объектов распределенные потоки данных используются для хранения и передачи состояния, и, как таковые, они играют роль, аналогичную переменным, полям. , и параметры на языках программирования, подобных Java.
Языки [ править ]
Этот раздел требует дополнительных ссылок для проверки . февраль 2019 г. ) ( Узнайте, как и когда удалить это сообщение-шаблон ) ( |
Языки программирования потока данных включают:
- ASCET
- Язык сценариев AviSynth для обработки видео
- Машина двоичного модульного потока данных BMDFM
- CAL
- Сборный
- Cuneiform , функциональный язык рабочего процесса.
- Конвейеры CMS
- Юм
- Джоуль
- Keysight VEE
- KNIME - это бесплатная платформа для анализа данных, отчетности и интеграции с открытым исходным кодом.
- LabVIEW , G [3]
- Линда
- Lucid [2]
- Блеск
- Макс / MSP
- Microsoft Visual Programming Language - компонент Microsoft Robotics Studio, предназначенный для программирования робототехники.
- Orange - инструмент визуального программирования с открытым исходным кодом для интеллектуального анализа данных , статистического анализа данных и машинного обучения .
- Oz теперь также распространяется с версии 1.4.0
- Пилот трубопровода
- Prograph
- Чистые данные
- Quartz Composer - разработан Apple ; используется для графической анимации и эффектов
- SAC Единичное назначение C
- SIGNAL (синхронный язык, ориентированный на поток данных, обеспечивающий многочастотные спецификации)
- Simulink
- СИЗАЛ
- SystemVerilog - язык описания оборудования
- Verilog - язык описания оборудования, включенный в стандарт SystemVerilog в 2009 году.
- VHDL - язык описания оборудования
- Инженерная среда XEE (Starlight) XML
- XProc
Интерфейсы прикладного программирования [ править ]
- Apache Beam : Java / Scala SDK, который объединяет потоковую (и пакетную) обработку с несколькими поддерживаемыми механизмами выполнения (Spark, Flink, поток данных Google ...)
- Apache Flink : библиотека Java / Scala, которая позволяет выполнять потоковые (и пакетные) вычисления поверх распределенного кластера Hadoop (или другого).
- SystemC : библиотека для C ++, в основном предназначенная для проектирования оборудования.
- TensorFlow : библиотека машинного обучения, основанная на программировании потоков данных.
См. Также [ править ]
- Актерская модель
- Программирование, управляемое данными
- Цифровая обработка сигналов
- Событийно-ориентированное программирование
- Программирование на основе потоков
- Функциональное реактивное программирование
- Глоссарий реконфигурируемых вычислений
- Высокопроизводительные реконфигурируемые вычисления
- Инкрементальные вычисления
- Модель параллельного программирования
- Разделенное глобальное адресное пространство
- Конвейер (Unix)
- Квантовая схема
- Сигнальное программирование
- Потоковая обработка
- Yahoo Pipes
Ссылки [ править ]
- ^ a b c Джонстон, Уэсли М .; Младший Пол Ханна; Ричард Дж. Миллар (март 2004 г.). «Достижения в языках программирования потоков данных» (PDF) . ACM Computing Surveys . 36 : 1–34. DOI : 10.1145 / 1013208.1013209 . Проверено 15 августа 2013 года .
- ^ a b c d e Уэдж, Уильям В .; Эдвард А. Эшкрофт (1985). Lucid, язык программирования потока данных (иллюстрированный ред.). Academia Press. ISBN 9780127296500. Проверено 15 августа 2013 года .
- ^ a b «Основы программирования потока данных» . Начало работы с продуктами NI . Корпорация National Instruments . Проверено 15 августа 2013 года .
- ^ Хартер, Ричард. «Языки потока данных и программирование - Часть I» . Мир Ричарда Хартера . Архивировано из оригинала 8 декабря 2015 года . Проверено 15 августа 2013 года .
- ^ «Почему языки программирования потока данных идеальны для программирования параллельного оборудования» . Серия технических документов по основам многоядерного программирования . Корпорация National Instruments . Проверено 15 августа 2013 года .
- ^ Джон Л. Келли младший; Кэрол Лохбаум; В.А. Высоцкий (1961). «Компилятор блок-схемы». Bell System Tech. Дж . 40 (3): 669–678. DOI : 10.1002 / j.1538-7305.1961.tb03236.x .
- ^ WR Сазерленд (1966). «Он-лайн графическое описание компьютерных процедур». Массачусетский технологический институт. Цитировать журнал требует
|journal=
( помощь ) - ^ Глория Ламберт (1973). «Масштабная обработка файлов: ПОГОЛ». POPL '73: Материалы 1-го ежегодного симпозиума ACM SIGACT-SIGPLAN по принципам языков программирования . ACM . С. 226–234.
- ^ Обработка подводных акустических данных, YT Chan
Внешние ссылки [ править ]
- Книга: Поток данных и системы реактивного программирования
- Основы программирования потока данных на F # и C #
- Программирование потока данных - концепция, языки и приложения
- Статическое планирование программ синхронного потока данных для цифровой обработки сигналов
- Обработка огромных нагрузок без увеличения сложности Основные концепции программирования потоков данных, доктор Добб, сентябрь 2011 г.
- Поток данных конвейера чистой функции