Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
doc:programmation:shell:pipe [24/09/2015 18:15] milou [Scénario complexe] |
doc:programmation:shell:pipe [22/08/2018 14:41] (Version actuelle) e-miel Ajout de la conclusion |
||
---|---|---|---|
Ligne 4: | Ligne 4: | ||
* Niveau requis : {{tag>avisé}} | * Niveau requis : {{tag>avisé}} | ||
* Commentaires : //Utiliser le caractère pipe.« | ». // | * Commentaires : //Utiliser le caractère pipe.« | ». // | ||
- | * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | ||
* Suivi : {{tag>à-tester}} | * Suivi : {{tag>à-tester}} | ||
- | * Création par e-miel 20-04-2011 18:31:31 | + | * Création par [[user>e-miel]] le 20-04-2011 18:31:31 |
* Testé par <...> le <...> | * Testé par <...> le <...> | ||
* Commentaires sur le forum : [[http://debian-facile.org/viewtopic.php?id=3804 | Lien vers le forum concernant ce tuto]]((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) | * Commentaires sur le forum : [[http://debian-facile.org/viewtopic.php?id=3804 | Lien vers le forum concernant ce tuto]]((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) | ||
- | **Nota :** | ||
- | Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! | ||
===== Introduction ===== | ===== Introduction ===== | ||
- | Le caractère pipe est « | ». | + | Le caractère pipe est « | » et s'obtient avec la combinaison de touches : <key>Alt Gr</key> avec le <key>6</key> du clavier des **lettres**. |
Les redirections d'entrée/sortie(([[:doc:programmation:shell:chevrons | Les redirections en commande]])) permettent de rediriger les résultats vers un fichier. \\ | Les redirections d'entrée/sortie(([[:doc:programmation:shell:chevrons | Les redirections en commande]])) permettent de rediriger les résultats vers un fichier. \\ | ||
Ligne 243: | Ligne 240: | ||
<note>La majorité des données a été perdue, alors que le scénario est identique au premier, au type d'écriture près.</note> | <note>La majorité des données a été perdue, alors que le scénario est identique au premier, au type d'écriture près.</note> | ||
- | === WRITE > READ non-blocant === | + | === WRITE > READ non-bloquant === |
<code user>wr 1s10k300k7k 2s5k 4s200k | rd -n 0s2k 3s5000k 5s6k</code> | <code user>wr 1s10k300k7k 2s5k 4s200k | rd -n 0s2k 3s5000k 5s6k</code> | ||
Ligne 259: | Ligne 256: | ||
<note>Comme précédemment, on voit que **wr** a été tué durant son sommeil.</note> | <note>Comme précédemment, on voit que **wr** a été tué durant son sommeil.</note> | ||
- | === WRITE non-blocant > READ non-bloquant === | + | === WRITE non-bloquant > READ non-bloquant === |
<code user>wr -n 1s10k300k7k 2s5k 4s200k | rd -n 0s2k 3s5000k 5s6k</code> | <code user>wr -n 1s10k300k7k 2s5k 4s200k | rd -n 0s2k 3s5000k 5s6k</code> | ||
Ligne 275: | Ligne 272: | ||
<note>Quasiment toutes les données ont été perdues.</note> | <note>Quasiment toutes les données ont été perdues.</note> | ||
+ | |||
+ | |||
+ | ===== Conclusion ===== | ||
+ | |||
+ | <note tip> | ||
+ | * **Pipe bloquant** = comportement par défaut = aucune consommation CPU quand le processus dort = se réveille toujours au bon moment :-) | ||
+ | * **Pipe non bloquant** = problèmes de données perdues et consommation CPU :-( | ||
+ | </note> | ||
+ | |||
+ | L'immense majorité des programmes ne personnalisent pas le comportement de leurs descripteurs, donc si vous utilisez des pipes dans vos scripts, ils seront bloquants : | ||
+ | |||
+ | * Les échanges de //petite taille// : texte brut échangé entre **awk**, **sed**, **bash**, **latex**, et en général tout traitement de script par **python** (choisi pour son efficacité à traiter les expressions régulières) se font implicitement au travers du tampon de 64ko, c'est la solution la plus rapide : chacun des processus participants enchaîne ses nombreux petits traitements internes sans s'arrêter puis se termine indépendamment de l'autre processus. | ||
+ | |||
+ | * Les échanges de //grande taille// : vidéo brute échangée entre **ffmpeg**, **x264**, et en général toute compression de grande taille par **gzip**, **xz**, se fait implicitement sans tampon, copie directe de processus à processus durant leur sommeil, c'est la solution la plus rapide : le tampon n'est jamais utilisé même partiellement. | ||
+ | |||
+ | <note>La quantité de données échangées déterminera si le comportement est **tampon** ou **sommeil**, mais dans les deux cas, les pipes sont bloquants.</note> | ||
+ |