On peut connaître des deadlocks avec le shell et ses pipes. Assez dérangeant quand on ne s'y attend pas !
... | tee fifo | xargs ... | cat - fifo
La très grande majorité des informaticiens comprennent très mal le sujet car derrière ce cachent des choix de design dans les langages de programmation, qui passent pour être incontournables. Pour les curieux intéressez vous au coroutines ; car la raison profonde à l'existence des pipes du shell sont les limitations du C ; attention goto en vue (ou du yield de mémoire pour Python/autres mais c'est pas du jeu…).
Le parallélisme naturel des pipes (et plus généralement cette manière de programmer par passage de relai) sont un effet de bord involontaire. Soit que le problème se traite très bien avec cette approche, soit pour l'optimisation de l'occupation CPU et des accès disque, c'est une bonne option. Par contre pour de la parallélisation pure c'est très moyen-bof en pratique (perso. mes pipeline shells exploitent rarement tous les cœurs à fond).
Question perf dans tous les cas il fait bufferiser. Ce qui permet souvent d'obtenir des perfs excellentes malgré les appels systèmes, et de vectoriser un minimum le code dans tous les cas.
Sans rien y connaître en Rust, j'avais cru lire précisément le contraire dans le billet : « Rust n'arrive pas à m'empêcher de me tirer une balle dans le pied quand j'utilise async » ?
# pour la blague...
Posté par greendev . Évalué à -6.
On peut connaître des deadlocks avec le shell et ses pipes. Assez dérangeant quand on ne s'y attend pas !
La très grande majorité des informaticiens comprennent très mal le sujet car derrière ce cachent des choix de design dans les langages de programmation, qui passent pour être incontournables. Pour les curieux intéressez vous au coroutines ; car la raison profonde à l'existence des pipes du shell sont les limitations du C ; attention
goto
en vue (ou du yield de mémoire pour Python/autres mais c'est pas du jeu…).Le parallélisme naturel des pipes (et plus généralement cette manière de programmer par passage de relai) sont un effet de bord involontaire. Soit que le problème se traite très bien avec cette approche, soit pour l'optimisation de l'occupation CPU et des accès disque, c'est une bonne option. Par contre pour de la parallélisation pure c'est très moyen-bof en pratique (perso. mes pipeline shells exploitent rarement tous les cœurs à fond).
Question perf dans tous les cas il fait bufferiser. Ce qui permet souvent d'obtenir des perfs excellentes malgré les appels systèmes, et de vectoriser un minimum le code dans tous les cas.
# Titre alternatif
Posté par Elfir3 . Évalué à 9.
"Je veux faire du code async, mais cet emmerdeur de Rust m'empêche de me tirer un balle dans le pied."
[^] # Re: Titre alternatif
Posté par ǝpɐןƃu∀ nǝıɥʇʇɐW-ǝɹɹǝıԀ (site web personnel) . Évalué à 5.
Sans rien y connaître en Rust, j'avais cru lire précisément le contraire dans le billet : « Rust n'arrive pas à m'empêcher de me tirer une balle dans le pied quand j'utilise async » ?
« IRAFURORBREVISESTANIMUMREGEQUINISIPARETIMPERAT » — Odes — Horace
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.