voordeel van het gebruik van systemu in plaats van open3?

De systeempagina zegt:

systemu kan op elk platform worden gebruikt om de status, stdout en stderr van elke opdracht te retourneren. in tegenstelling tot andere methoden zoals open3/popen4 is er geen enkel gevaar van volle leidingen of threading-problemen die uw proces of subproces hinderen.

(Https://github.com/ahoward/systemu)

Kan iemand dit een beetje uitleggen?

3

1 antwoord

Methoden zoals popen en de verschillende spin-offs zijn handig en maken deel uit van de verwachte API voor een volledige I/O-bibliotheek.

Ze moeten echter terloops of voorzichtig worden gebruikt, omdat ze snel vastlopen. Terloops bedoel ik, als je allebei schrijft en leest van de opdracht, is het nog steeds OK, zolang je maar niet veel schrijft of niet veel leest. Voorzichtig, ik bedoel, je kunt grote hoeveelheden data verplaatsen, maar alleen als je de innerlijke details van de operatie in gedachten houdt en opzettelijk tegen deadlock engineering.

Stel je voor dat je veel dingen schrijft in je opdracht popened en vervolgens een resultaat leest. Als je meer schrijft dan een pijp zal bufferen, zal je proces slapen. Dat is OK in de praktijk, meestal, maar wat als het commando veel dingen moet schrijven? Nu kan it slapen en de invoer die u verzendt niet voltooien. Je zult de invoer niet voltooien, zodat je nooit meer wakker wordt en resultaten zult lezen.

Impasse!

2
toegevoegd