Конвейер (программное обеспечение)

редактировать

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

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

Содержание
  • 1 Реализация
  • 2 VM / CMS и z / OS
  • 3 Конвейеры объектов
  • 4 Конвейеры в графическом интерфейсе пользователя
  • 5 Прочие соображения
  • 6 См. Также
  • 7 Примечания
  • 8 Внешние ссылки
Реализация

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

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

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

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

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

  • RaftLib - C / C ++ Apache 2.0 License
VM / CMS и z / OS

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. Также
Примечания
  1. ^Есть исключения, например, сигналы "сломанная труба".
  2. ^«Монадический ввод-вывод и программирование оболочки UNIX»
Внешние ссылки
Последняя правка сделана 2021-06-02 06:37:54
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте