Конвейер (вычисления)


В вычислениях конвейер , также известный как конвейер данных , [1] представляет собой набор последовательно соединенных элементов обработки данных , где выход одного элемента является входом следующего. Элементы конвейера часто выполняются параллельно или с разделением по времени. Некоторый объем буферной памяти часто вставляется между элементами.

Некоторые операционные системы [ необходим пример ] могут предоставлять UNIX-подобный синтаксис для объединения нескольких запусков программ в конвейер, но реализовать последний как простое последовательное выполнение, а не настоящую конвейерную обработку, а именно, ожидая завершения каждой программы перед запуском следующей. . [ нужна ссылка ]

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

Предположим, что для сборки одного автомобиля требуется три задачи, занимающие соответственно 20, 10 и 15 минут. Тогда, если бы все три задачи выполняла одна станция, завод выпускал бы по одному автомобилю каждые 45 минут. Используя конвейер из трех станций, завод будет выпускать первый автомобиль за 45 минут, а затем новый автомобиль каждые 20 минут.

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

Поскольку пропускная способность конвейера не может быть лучше, чем у его самого медленного элемента, разработчик должен попытаться разделить работу и ресурсы между этапами, чтобы всем им требовалось одинаковое время для выполнения своих задач. В приведенном выше примере сборки автомобиля, если бы три задачи выполнялись по 15 минут каждая вместо 20, 10 и 15 минут, задержка по-прежнему составляла бы 45 минут, но тогда новый автомобиль собирался бы каждые 15 минут, а не 20.