Les tubes sous Unix ont un tampon, donc même si le processus de droite (RSP) ne consomme aucune donnée, le processus de gauche (LSP) est capable de produire quelques kilo-octets avant de bloquer.
Ensuite, si la mémoire tampon est pleine, le LSP est finalement bloqué. Lorsque le RSP lit les données, il libère tout ou partie de l'espace tampon et le LSP reprend l'opération.
Si au lieu de 2 processus vous en avez 3, la situation est plus ou moins la même :un producteur plus rapide est bloqué par un consommateur plus lent. Et évidemment, un consommateur plus rapide est bloqué par un producteur plus lent si le tuyau se vide :pensez à un shell interactif, attendant le producteur le plus lent de tous :l'utilisateur.
Par exemple la commande suivante :
$ yes | cat | more
Depuis more
se bloque lorsque l'écran est plein, jusqu'à ce que l'utilisateur appuie sur une touche, le cat
processus remplira son tampon de sortie et se bloquera, puis le yes
processus remplira sa mémoire tampon et se bloquera également. Tout en attendant que l'utilisateur continue, comme il se doit.
PS :Un fait intéressant est :que se passe-t-il lorsque le more
le processus se termine ? eh bien, le côté droit de ce tuyau est fermé, donc le cat
le processus obtiendra un SIGPIPE
signal (si jamais il écrit à nouveau dans le tuyau, et il le fera) et mourra. La même chose arrivera au yes
traiter. Tous les processus meurent, comme il se doit.
A a un tuyau vers B et B a un tuyau vers C. Chaque tuyau a un tampon; B et C bloquent s'ils essaient de lire et qu'il n'y a pas d'entrée disponible (la fin du flux compte comme une entrée). A et B bloquent s'ils ont une sortie à écrire, mais que le tampon du tube est plein.
Les trois processus s'exécutent simultanément, en utilisant autant de CPU que possible. Le système d'exploitation les bloque dans l'appel système en lecture/écriture si nécessaire si le tampon de canal est respectivement épuisé/plein.
Ainsi, ils sont motivés à la fois par le consommateur et le producteur, c'est-à-dire que le taux est le minimum du taux de consommation et du taux de production. Si le consommateur est plus rapide, la performance est pilotée par le producteur, et vv.