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


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

FBP — это особая форма программирования потоков данных, основанная на ограниченных буферах, информационных пакетах с определенным временем жизни, именованных портах и ​​отдельном определении соединений.

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

Процессы взаимодействуют посредством соединений с фиксированной пропускной способностью. Соединение присоединяется к процессу посредством порта , имя которого согласовано между кодом процесса и определением сети. Один и тот же фрагмент кода может выполняться более чем одним процессом. В любой момент времени данный IP-адрес может принадлежать только одному процессу или находиться в пути между двумя процессами. Порты могут быть простыми или массивными, например, для входного порта компонента Collate, описанного ниже. Именно совмещение портов с асинхронными процессами позволяет поддерживать многие долгоиграющие примитивные функции обработки данных, такие как Sort, Merge, Summarize и т.д., в виде программных черных ящиков .

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

Определение сети обычно представляет собой схему и преобразуется в список соединений на каком-либо языке более низкого уровня или в нотации. FBP часто является визуальным языком программирования на этом уровне. Более сложные определения сети имеют иерархическую структуру, состоящую из подсетей с «липкими» соединениями. Многие другие языки / среды выполнения, основанные на потоках, построены на более традиционных языках программирования, наиболее примечательным примером является RaftLib , который использует операторы C++, подобные iostream, для указания графа потока.


Простая диаграмма FBP
«Проблема Telegram» Питера Наура
Каноническая структура «пакетного обновления»
Пример мультиплексирования
Схема общего интерактивного приложения
Две функции, питающие одну