Потоки обрабатываются иначе, чем пакетные данные : обычные функции не могут работать с потоками в целом, поскольку они имеют потенциально неограниченные данные, и формально потоки являются кодовыми (потенциально неограниченными), а не данными (которые конечны). Функции, которые работают с потоком, создавая другой поток, известны как фильтры и могут быть подключены в конвейеры , аналогично композиции функций . Фильтры могут работать с одним элементом потока одновременно или могут основывать элемент вывода на нескольких элементах ввода, например, на скользящем среднем .
Примеры
Термин «поток» используется по-разному:
«Редактирование потока», как в случае с sed , awk и perl . Потоковое редактирование обрабатывает файл или файлы на месте, без необходимости загрузки файлов в пользовательский интерфейс. Одним из примеров такого использования является поиск и замена всех файлов в каталоге из командной строки.
В Unix и родственных системах, основанных на языке C , поток — это источник или приемник данных, обычно отдельных байтов или символов . Потоки — это абстракция, используемая при чтении или записи файлов, а также при обмене данными через сетевые сокеты . Стандартные потоки — это три потока, доступные для всех программ.
Устройства ввода-вывода можно интерпретировать как потоки, поскольку они производят или потребляют потенциально неограниченные данные с течением времени.
В языке Scheme и некоторых других поток — это лениво вычисляемая или задержанная последовательность элементов данных. Поток можно использовать аналогично списку, но последующие элементы вычисляются только при необходимости. Таким образом, потоки могут представлять бесконечные последовательности и серии . [1]
Потоки могут использоваться в качестве базового типа данных для каналов межпроцессного взаимодействия .
Другое использование
Термин «поток» также применяется к развилкам файловой системы , где несколько наборов данных связаны с одним именем файла. Чаще всего существует один основной поток, который составляет обычные данные файла, а дополнительные потоки содержат метаданные . Здесь «поток» используется для обозначения «данных переменного размера», в отличие от метаданных фиксированного размера, таких как расширенные атрибуты , но отличается от «потока», который используется в противном случае, что означает «данные, доступные с течением времени, потенциально бесконечные».