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 [26/09/2017 12:51] smolski [Introduction] |
doc:programmation:shell:pipe [22/08/2018 14:41] (Version actuelle) e-miel Ajout de la conclusion |
||
---|---|---|---|
Ligne 240: | 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 256: | 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 272: | 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> | ||
+ |