Введение

Цепочка элементов обработки программного обеспечения, программные конвейеры в целом.

В разработке программного обеспечения конвейер представляет собой цепочку элементов обработки (процессов, потоков, корутин, функций и т. д.), расположенных таким образом, что выход каждого элемента является входом следующего. Эта концепция аналогична физическому конвейеру. Обычно между последовательными элементами предусмотрен некоторый буфер. Информация, протекающая по этим конвейерам, часто представляет собой поток записей, байтов или битов, а элементы конвейера могут называться фильтрами. Это также известно как шаблон проектирования "трубы и фильтры". Соединение элементов в конвейер аналогично композиции функций. В узком смысле конвейер является линейным и однонаправленным, хотя иногда этот термин применяется к более общим потокам. Например, преимущественно однонаправленный конвейер может иметь некоторую связь в обратном направлении, известную как канал обратной связи или бэк-канал, как в случае с lexer hack, или конвейер может быть полностью двунаправленным. Потоки с однонаправленными деревьями и топологией направленного ациклического графа ведут себя аналогично линейным конвейерам. Отсутствие циклов в таких потоках делает их простыми, и поэтому их можно условно называть "конвейерами".

VM/CMS и z/OS

CMS Pipelines – это перенос концепции конвейеров в системы VM/CMS и z/OS. Он поддерживает значительно более сложные структуры конвейеров, чем оболочки Unix, с этапами, принимающими несколько входных потоков и генерирующими несколько выходных потоков. (Ядро Unix поддерживает такую функциональность, но немногие программы ее используют из-за сложного синтаксиса и блокирующих режимов, хотя некоторые оболочки реализуют ее посредством произвольного назначения дескрипторов файлов). Традиционные прикладные программы в операционных системах IBM Mainframe не имеют стандартных входных и выходных потоков для перенаправления или организации конвейеров. Вместо запуска процессов с внешними программами, CMS Pipelines использует легковесный диспетчер для одновременного выполнения экземпляров более чем 200 встроенных программ, реализующих типичные утилиты UNIX и обеспечивающих интерфейс к устройствам и службам операционной системы. Помимо встроенных программ, CMS Pipelines определяет структуру, позволяющую пользователям создавать программы на REXX с входными и выходными потоками, которые могут использоваться в конвейере. Данные в IBM Mainframe обычно хранятся в файловой системе, ориентированной на записи, а подключенные устройства ввода-вывода работают в режиме записи, а не в режиме потока. Следовательно, данные в CMS Pipelines обрабатываются в режиме записи. Для текстовых файлов запись содержит одну строку текста. В целом, CMS Pipelines не использует буферизацию данных, а передает записи данных последовательно, шаг за шагом, от одной программы к другой. Это обеспечивает детерминированный поток данных по сети взаимосвязанных конвейеров.

Объектные трубопроводы

Кроме байт-потоковых конвейеров, существуют также объектные конвейеры. В объектном конвейере элементы обработки выдают объекты, а не текст. PowerShell включает внутренний объектный конвейер, который передает .NET-объекты между функциями в среде выполнения PowerShell. Каналы, используемые в языке программирования Limbo, — другие примеры этой концепции.

Трубопроводы в ГИО

Графические среды, такие как RISC OS и ROX Desktop, также используют конвейеры. Вместо того чтобы предоставлять диалоговое окно сохранения с файловым менеджером, позволяющим пользователю указать, куда программа должна записывать данные, RISC OS и ROX предоставляют диалоговое окно сохранения, содержащее значок (и поле для указания имени). Место назначения указывается перетаскиванием этого значка. Пользователь может перетащить значок в любое место, куда можно перетащить уже сохраненный файл, включая значки других программ. Если значок перетащен на значок программы, она запускается, а содержимое, которое в противном случае было бы сохранено, передается на стандартный вход новой программы. Например, пользователь, просматривающий веб-страницы, может обнаружить сжатое изображение в формате gz, которое он хочет отредактировать и повторно загрузить. Используя графические конвейеры, он может перетащить ссылку на программу для распаковки, перетащить значок, представляющий извлеченное содержимое, в редактор изображений, отредактировать его, открыть диалоговое окно "Сохранить как" и перетащить значок в программу для загрузки. В принципе, этот метод можно использовать и с обычным диалоговым окном сохранения, но для этого потребуется, чтобы программы пользователя имели очевидное и легкодоступное местоположение в файловой системе. Поскольку это часто не так, графические конвейеры встречаются редко.

Другие соображения

Название "конвейер" происходит от упрощенной аналогии с физической системой трубопроводов, поскольку конвейер обычно обеспечивает однонаправленный поток информации, подобно тому, как вода течет по трубе. Трубы и фильтры можно рассматривать как форму функционального программирования, использующую байтовые потоки в качестве объектов данных. В частности, их можно рассматривать как специфическую форму монады для операций ввода-вывода. Концепция конвейера также является ключевой для веб-фреймворка Cocoon или любых реализаций XProc (Стандарты W3C), где она позволяет изменять исходный поток данных перед окончательным отображением. Этот подход способствует использованию текстовых потоков в качестве входных и выходных данных программ. Эта зависимость от текста должна учитываться при разработке графических интерфейсов для текстовых программ.