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.
# pour la blague...
Posté par greendev . En réponse au lien Async Rust Is A Bad Language. É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
gotoen 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.