Las pipelines a menudo se implementan en un sistema operativo multitarea, lanzando todos los elementos al mismo tiempo que los procesos, y atendiendo automáticamente las solicitudes de lectura de datos de cada proceso con los datos escritos por el proceso ascendente – esto se puede llamar pipeline multiprocesado. De esta manera, el PROGRAMADOR cambiará naturalmente la CPU entre los procesos para minimizar su tiempo de inactividad. En otros modelos comunes, los elementos se implementan como hilos ligeros o como corutinas para reducir la sobrecarga del sistema operativo a menudo involucrada con los procesos. Dependiendo del sistema operativo, los subprocesos pueden ser programados directamente por el sistema operativo o por un gestor de subprocesos. Las corrutinas siempre son programadas por un gerente de corrutinas de alguna forma.
Generalmente, las solicitudes de lectura y escritura son operaciones de bloqueo, lo que significa que la ejecución del proceso de origen, al escribir, se suspende hasta que todos los datos puedan escribirse en el proceso de destino, y, del mismo modo, la ejecución del proceso de destino, al leer, se suspende hasta que al menos algunos de los datos solicitados puedan obtenerse del proceso de origen. Esto no puede llevar a un punto muerto, en el que ambos procesos esperarían indefinidamente el uno al otro para responder, ya que al menos uno de los dos procesos poco después tendrá su solicitud atendida por el sistema operativo y continuará ejecutándose.
Para el rendimiento, la mayoría de los sistemas operativos que implementan tuberías utilizan búferes de tuberías, que permiten que el proceso de origen proporcione más datos de los que el proceso de destino puede o desea recibir actualmente. Bajo la mayoría de los Unicios y sistemas operativos tipo Unix, también está disponible un comando especial que implementa un búfer de tuberías de tamaño potencialmente mucho más grande y configurable, normalmente llamado «búfer». Este comando puede ser útil si el proceso de destino es significativamente más lento que el proceso de origen, pero de todos modos se desea que el proceso de origen pueda completar su tarea lo antes posible. Por ejemplo, si el proceso de origen consiste en un comando que lee una pista de audio de un CD y el proceso de destino consiste en un comando que comprime los datos de audio de forma de onda a un formato como MP3. En este caso, almacenar en búfer toda la pista en un búfer de tuberías permitiría que la unidad de CD girara hacia abajo más rápidamente y permitiría al usuario eliminar el CD de la unidad antes de que finalice el proceso de codificación.
Este comando de búfer se puede implementar usando llamadas al sistema para leer y escribir datos. La espera ocupada y derrochadora se puede evitar utilizando instalaciones como poll o select o multihilo.
Algunos ejemplos notables de sistemas de software de canalización incluyen:
- Licencia RaftLib – C/C++ Apache 2.0