Les pipelines sont souvent implémentés dans un système d’exploitation multitâche, en lançant tous les éléments en même temps que les processus, et en gérant automatiquement les demandes de lecture de données par chaque processus avec les données écrites par le processus en amont – cela peut être appelé un pipeline multitraité. De cette manière, le CPU sera naturellement commuté entre les processus par l’ordonnanceur de manière à minimiser son temps d’inactivité. Dans d’autres modèles courants, les éléments sont implémentés sous forme de threads légers ou de coroutines pour réduire la surcharge du système d’exploitation souvent impliquée dans les processus. Selon le système d’exploitation, les threads peuvent être planifiés directement par le système d’exploitation ou par un gestionnaire de threads. Les coroutines sont toujours programmées par un responsable coroutine d’une forme ou d’une autre.
Habituellement, les requêtes de lecture et d’écriture sont des opérations de blocage, ce qui signifie que l’exécution du processus source, lors de l’écriture, est suspendue jusqu’à ce que toutes les données puissent être écrites dans le processus de destination, et, de même, l’exécution du processus de destination, lors de la lecture, est suspendue jusqu’à ce qu’au moins certaines des données demandées puissent être obtenues à partir du processus source. Cela ne peut pas conduire à une impasse, où les deux processus attendraient indéfiniment qu’ils répondent l’un à l’autre, car au moins l’un des deux processus verra sa demande traitée par le système d’exploitation peu de temps après et continuera à s’exécuter.
Pour les performances, la plupart des systèmes d’exploitation implémentant des pipes utilisent des tampons de pipes, qui permettent au processus source de fournir plus de données que le processus de destination n’est actuellement en mesure ou ne souhaite en recevoir. Sous la plupart des systèmes d’exploitation Unices et de type Unix, une commande spéciale est également disponible qui implémente un tampon de tuyau de taille potentiellement beaucoup plus grande et configurable, généralement appelé « tampon ». Cette commande peut être utile si le processus de destination est nettement plus lent que le processus source, mais il est de toute façon souhaité que le processus source puisse terminer sa tâche le plus rapidement possible. Par exemple, si le processus source consiste en une commande qui lit une piste audio à partir d’un CD et que le processus de destination consiste en une commande qui compresse les données audio de forme d’onde dans un format tel que MP3. Dans ce cas, la mise en mémoire tampon de la piste entière dans un tampon de canalisation permettrait au lecteur de CD de tourner plus rapidement et permettrait à l’utilisateur de retirer le CD du lecteur avant la fin du processus d’encodage.
Une telle commande de tampon peut être implémentée à l’aide d’appels système pour la lecture et l’écriture de données. L’attente fastidieuse peut être évitée en utilisant des installations telles que poll ou select ou multithreading.
Voici quelques exemples notables de systèmes logiciels de pipeline :
- Licence RaftLib–C/C++ Apache 2.0