Понедельник, 18.02.2019
Ukrainiancontet.at.ua
Меню сайта
Категории раздела
Програмування [35]
Мови веб-програмування [5]
О компании [0]
Новости игры
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » 2015 » Октябрь » 25 » Програмування потоків даних
22:48
Програмування потоків даних
Програмування потоків даних (англ. dataflow programming) — підхід до програмування, при якому програма моделюється у вигляді орієнтованого графа потоку даних між операціями, подібного діаграми потоку даних. Розвивається в програмної інженерії з 1970-х років[].

Природне візуальне уявлення поряд з підтримкою паралелізму є двома привабливими для розробників властивостями даної парадигми[]. Зрозуміло, програмування потоків даних необов'язково пов'язане з інструментами візуального програмування.

Програмісти Unix знайомі з програмуванням потоків даних, так як в командній оболонці цієї системи застосовуються іменовані канали та інші подібні засоби межпроцессного взаємодії

Основою роботи програм потоків даних (dataflow) є активація обчислень на вузлах (node), які можна вважати чорними ящиками, що викликається змінами, оновленнями вхідних даних. Вузол (моделі — вершина графа) представляє з себе елемент, який здійснює обробку даних на вході, перетворюючи їх в дані на виході. Робота вузла протягом періоду активації вважається одиничним обчисленням. Вузли посилають і приймають дані через порти (port) — точки з'єднання дуг (ребер графа) і вузлів. Порти — все, що пов'язує вузол з оточенням. Для розрізнення вузли можуть мати імена. Результат обчислення вузла часто, але не обов'язково, є функцей вхідних даних, тобто, результат може змінюватися з часом. Обчислювальна робота вузла називається активацією (activation, firing). В активованому стані вузол бере вхідні дані, виробляє обчислення, віддає вихідні дані у відповідні порти. Передані дані незалежно від їх типу називаються токенами (token). Токени надходять по дугах (їх можна називати ребрами, зв'язками, з'єднаннями). Поява даних на вхідної дузі може викликати активацію сайту. Зазвичай прийнято, що в дузі знаходиться не більше одного сертифіката, але в теорії можна створити і моделі з необмеженою ємністю. У більш розроблених моделях дуги можуть зливатися в одну або розгалужуватиметься[].

В результаті програмування виходить програма потоків даних — орієнтований граф. Всі шляхи взаємодії елементів явно задаються програмістом. У найпростішому випадку конвеєрної обробки (pipeline dataflow) елементи можна задати послідовністю одиничних обчислень. Обчислення проводяться по черзі, при вступі токенів на вхід. Така схема називається виконанням, керованим даними (data-driven execution[].

В програмування потоків даних може використовувати і більш складні конфігурації, ніж конвеєр. Зокрема, такі можливості можуть бути додані до найпростішої моделі (в тій або іншій комбінації)[3]:
Push - або pull-дисципліни для дуг. У першому випадку токени «виштовхуються» з ініціативи виробника даних, а в другому ініціатором запиту сертифіката є споживач. Два підходи також відомі як обчислення, керовані даними (data-driven computation) та обчислення, кероване запитами (demand-driven computation)[]

Змінні (mutable) або невідмінювані (immutable) дані. Хоча незмінні дані — найбільш вдалий підхід для паралельної обробки, деякі реалізації, засновані на імперативних мовах програмування, можуть вимагати змінюваних даних з усіма необхідними механізмами синхронізації.
Можливості злиття (join) і розгалуження (split) дуг. У разі злиття, порт призначення дуги отримує токени від будь-якого з двох портів на початку дуги. При розгалуженні токен зазвичай копіюється двох одержувачам. Злиття та розгалуження можуть бути множинними.
Статична або динамічна програма потоку даних. Ця характеристика стосується можливості змін у графі потоку даних. Апаратні реалізації, як правило, використовують статичні програми, але в загальному випадку структура графа може динамічно змінюватися. У динамічній програмі деяка дуга може змінити порт призначення або вузол обробки — свої характеристики.
Вузол може бути функціональним або ж зберігати свій стан (stateful) всередині.
Синхронний або асинхронний активація. Один з найважливіших параметрів класифікації систем потоків даних. Синхронна активація передбачає деякий заздалегідь зафіксований і спланований порядок активації, побудований з урахуванням всієї програми в цілому. В системі з асинхронною активацією кожен блок піклується про своєму сьогоденні і активація відбувається при задоволенні умов, наприклад, появою даних на вході. Для систем з асинхронною активацією можуть знадобитися дуги ємністю більше одного сертифіката. Схема активації може бути і змішаної (hybrid).
Численні вхідні і вихідні порти. Наявність декількох портів може вимагати зміни умов активації. Наприклад, активація може відбуватися, якщо хоча б один з входів отримав дані. У більш складних випадках можуть використовуватися схеми активації (fire pattern), в якому для кожного порту одне з чотирьох відносин до активації: 1 — на вході є дані, 0 — на вході немає даних, X — наявність даних байдуже, * — безумовна активація (незалежно від умов для інших портів). Вузол може мати кілька схем, які перевіряються одна за одною, поки не схема не буде відповідати поточним станом. Наприклад, трьохпортовий вузол зі схемою «[1, 1, X], [0, X, 0]» буде активізований, якщо перші два порти отримали дані або на першому і третьому порту немає даних.
Зворотні зв'язки, або цикли, дозволяють використовувати вихідний потік знову на вході обчислювального блоку. При роботі з циклами необхідно уникати тупикових ситуацій (див. взаємне блокування), при якому деякий вузол буде чекати даних на вході, які залежать від його виходу. Для роботи зі зворотним зв'язком може зажадати завдання початкових токенів (ще до запуску програми) для дуг зворотного зв'язку або використання одноразових вузлів (one shot), які активуються рівно один раз, на початку роботи програми.
Складові вузли (compound node) дозволяють пакетувати примітивні вузли в більш великі модулі.
Рекурсивні вузли. Різновид складеного вузла, що містить копію самого себе.
Багатошвидкісне виробництво і споживання токенів. Для підвищення продуктивності при активації може бути дозволено одержання і відправлення кількох токенів з порту відразу.
Категория: Програмування | Просмотров: 109 | Добавил: Admin | Теги: Програмування потоків даних | Рейтинг: 0.0/0
Всего комментариев: 0
avatar
Вход на сайт

Поиск
Интернет
Здоровье
Афиша
Ситуация на восток
Религия
Архив записей
Каталог сайтов Всего.RU
Рейтинг@Mail.ru
Copyright Ukrainiancontet.at.ua © 2019
uCozЯндекс.Метрика