Манипуляции с потоком данных
Как правило, приложение потока данных состоит из множества модулей. Разные модули выполняют разную работу. Каждому модулю может принадлежать один или несколько воркеров (горутин), которые одновременно выполняют одну и ту же работу, указанную для этого модуля. Вот список некоторых примеров работы модулей на практике:
-
генерация/сбор/загрузка данных;
-
обслуживание/сохранение данных;
-
расчет/анализ данных;
-
проверка/фильтрация данных;
-
агрегация/разделение данных;
-
компоновка/декомпозиция данных;
-
дублирование/распространение данных.
Обработчик в модуле может получать данные от нескольких других модулей в качестве входных данных и отправлять данные для обслуживания других модулей в качестве выходных данных. Модуль может быть как потребителем данных, так и производителем данных. Модуль, который только отправляет данные некоторым другим модулям, но никогда не получает данные от других модулей, называется модулем только для производителя. Модуль, который получает данные только от некоторых других модулей, но никогда не отправляет данные другим модулям, называется модулем только для потребителя.
Вместе множество модулей образуют систему потока данных.
Далее мы рассмотрим некоторые реализации рабочих модулей потока данных. Эти реализации предназначены для пояснения, поэтому они очень просты и могут быть неэффективными.
Генерация/сбор/загрузка данных
Здесь мы используем генератор случайных чисел в качестве примера. Функция-генератор возвращает один результат, но не принимает параметров.
RandomGenerator генератор случайных чисел — это мультивозвратный promise.
Производитель данных может закрыть канал выходного потока в любое время, чтобы прекратить генерацию данных.