Quelles sont les conséquences de l'écriture de grandes quantités de données sur disque à l'aide d'E/S sans tampon (au moins pour tout ce qui se trouve au-dessus du niveau du système d'exploitation)?Conséquences des E/S de fichier sans tampon
Détails:
J'écris un script Ruby qui exécutera un autre morceau de code, la capture de son stdout et stderr et les écrire dans un fichier. Apparemment (dans Ruby, au moins), stderr n'est pas tamponné et stdout est tamponné, ce qui dans mon cas se traduit par une sortie en désordre car les lignes stderr sont imprimées avant certaines lignes stdout.
Il semble que la solution consiste à faire en sorte que cette partie du code utilise des E/S non tamponnées (avec IO.sync = true
). Toutefois, le morceau de code que mon script exécute écrit également de grandes quantités de texte sur le disque. Donc, je me demande quelle est la conséquence de ne pas utiliser le tampon Ruby (seulement le tampon du système d'exploitation et ci-dessous), et si c'est important, comment puis-je contourner le problème de commande?
Peut-être que j'utilise alors une mauvaise terminologie. Je n'ai pas besoin d'utiliser 'syswrite', juste 'vider' les flux résout mon problème (mauvais ordre de stdout/stderr redirigé). Ma question est: quelles sont les conséquences de l'écriture de grandes quantités de texte sur le disque alors que 'IO.sync' est' true'? – jrdioko
Rappelez-vous que le tampon est automatiquement vidé quand il est plein de toute façon, donc si le montant que vous écrivez atteindrait fréquemment cette limite, la différence est mineure. Typiquement le tampon est de l'ordre de 1-2KB. – tadman