GNU/Linux >> Tutoriels Linux >  >> Linux

Les pipes Unix/Linux sont-elles axées sur le producteur ou le consommateur ?

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.


Linux
  1. Communication inter-processus sous Linux :utilisation de canaux et de files d'attente de messages

  2. Linux – Linux est-il un Unix ?

  3. UNIX / Linux :Qu'est-ce qu'un Shell ? Quels sont les différents coquillages ?

  4. Utilisation maximale de la mémoire d'un processus Linux/Unix

  5. Les différents noyaux Linux/Unix sont-ils interchangeables ?

Pourquoi les liens physiques vers les répertoires ne sont-ils pas autorisés sous Unix/linux ?

Linux – Les différents noyaux Linux/unix sont-ils interchangeables ?

Que sont les tuyaux sous Linux ? Comment fonctionne la redirection de tuyau ?

Linux contre Unix

UNIX / Linux :7 exemples pratiques de commandes PS pour la surveillance des processus

Les variables d'environnement sont-elles visibles pour les utilisateurs non privilégiés sous Linux ?