Pipeline (программное обеспечение) - Pipeline (software)

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

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

Выполнение

Конвейеры часто реализуются в многозадачность Операционные системы, путем запуска всех элементов одновременно с процессами и автоматического обслуживания запросов чтения данных каждым процессом данными, записанными вышестоящим процессом - это можно назвать многопроцессорный трубопровод. Таким образом, ЦПУ будет естественно переключаться между процессами планировщик чтобы минимизировать время простоя. В других распространенных моделях элементы реализованы как легкие потоки или сопрограммы, чтобы уменьшить накладные расходы ОС, часто связанные с процессами. В зависимости от ОС потоки могут планироваться непосредственно ОС или диспетчером потоков. Сопрограммы всегда планируются менеджером сопрограмм той или иной формы.

Обычно запросы на чтение и запись являются блокирующими операциями, что означает, что выполнение исходного процесса при записи приостанавливается до тех пор, пока все данные не будут записаны в целевой процесс, и, аналогично, выполнение целевого процесса при чтении, приостанавливается до тех пор, пока хотя бы часть запрошенных данных не будет получена из исходного процесса. Это не может привести к тупик, где оба процесса будут бесконечно ждать ответа друг от друга, так как по крайней мере один из двух процессов вскоре после этого получит свой запрос, обслуживаемый операционной системой, и продолжит выполнение.

Для повышения производительности большинство операционных систем, реализующих каналы, используют канал буферы, которые позволяют исходному процессу предоставлять больше данных, чем целевой процесс в настоящее время может или хочет получить. В большинстве Unix и Unix-подобных операционных систем также доступна специальная команда, которая реализует конвейерный буфер потенциально гораздо большего и настраиваемого размера, обычно называемый «буфером». Эта команда может быть полезна, если конечный процесс значительно медленнее, чем исходный процесс, но в любом случае желательно, чтобы исходный процесс мог завершить свою задачу как можно скорее. Например, если исходный процесс состоит из команды, которая считывает звуковую дорожку из CD а целевой процесс состоит из команды, которая сжимает форма волны аудиоданные в формат, например MP3. В этом случае буферизация всей дорожки в буфере конвейера позволит дисководу компакт-дисков замедлить вращение быстрее и позволит пользователю извлечь компакт-диск из дисковода до завершения процесса кодирования.

Такую команду буфера можно реализовать с помощью системные вызовы для чтения и записи данных. Расточительный занято ожиданием можно избежать, используя такие средства, как опрос или же Выбрать или же многопоточность.

Некоторые известные примеры систем программного обеспечения конвейера включают:

  • RaftLib - Лицензия C / C ++ Apache 2.0

ВМ / CMS и z / OS

Конвейеры CMS это порт идеи трубопровода для ВМ / CMS и z / OS системы. Он поддерживает гораздо более сложные конвейерные структуры, чем оболочки Unix, с шагами, принимающими несколько входных потоков и производящими несколько выходных потоков. (Такая функциональность поддерживается ядром Unix, но немногие программы используют ее, поскольку она создает сложный синтаксис и режимы блокировки, хотя некоторые оболочки действительно поддерживают ее через произвольные дескриптор файла назначение).

Традиционные прикладные программы в операционных системах мэйнфреймов IBM не имеют стандартных входных и выходных потоков, позволяющих перенаправление или конвейерную обработку. Вместо того, чтобы порождать процессы с внешними программами, CMS Pipelines предлагает облегченный диспетчер для одновременного выполнения экземпляров встроенных программ для запуска конвейера. Более 200 встроенных программ, реализующих типовые утилиты UNIX и интерфейс для устройств и служб операционной системы. Помимо встроенных программ, CMS Pipelines определяет структуру, позволяющую писать пользователю REXX программы с входными и выходными потоками, которые можно использовать в конвейере.

Данные на мэйнфреймах IBM обычно хранятся в Файловая система, ориентированная на запись и подключенные устройства ввода-вывода работают в режиме записи, а не в потоковом режиме. Как следствие, данные в CMS Pipelines обрабатываются в режиме записи. Для текстовых файлов запись содержит одну строку текста. Как правило, CMS Pipelines не буферизует данные, а передает записи данных по шагам блокировки от одной программы к другой. Это обеспечивает детерминированный поток данных через сеть взаимосвязанных конвейеров.

Объектные конвейеры

Помимо конвейеров на основе байтовых потоков, существуют также конвейеры объектов. В конвейере объектов обработка элементов выводит объекты вместо текста. Windows PowerShell включает внутренний конвейер объектов, который передает .СЕТЬ объекты между функциями в среде выполнения PowerShell. каналы, найденный в Язык программирования Limbo другие примеры этой метафоры.

Конвейеры в графических интерфейсах

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

Например, пользователь просматривает Всемирная паутина могут встретить сжатое изображение .gz, которое они хотят отредактировать и повторно загрузить. Используя конвейеры графического интерфейса пользователя, они могли перетащить ссылку на свою программу деархивирования, перетащить значок, представляющий извлеченное содержимое, на свои редактор изображений, отредактируйте его, откройте диалоговое окно «Сохранить как» и перетащите его значок в программное обеспечение для загрузки.

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

Прочие соображения

Название «трубопровод» происходит от грубой аналогии с физическим водопроводом в том смысле, что трубопровод обычно[1] позволяет информации течь только в одном направлении, как вода часто течет по трубе.

Трубы и фильтры можно рассматривать как форму функциональное программирование, используя байтовые потоки как объекты данных; более конкретно, их можно рассматривать как особую форму монада за Ввод / вывод.[2]

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

Этот шаблон поощряет использование текстовых потоков в качестве ввода и вывода программ. Эту опору на текст необходимо учитывать при создании графический оболочки для текстовых программ.

Смотрите также

Примечания

  1. ^ Есть исключения, например, сигналы «сломанная труба».
  2. ^ «Монадический ввод-вывод и программирование оболочки UNIX»

внешняя ссылка