Pipe vs Fichier Temporaire
Est-il une grosse différence de performances entre:
- Processus d'écriture d'un fichier temporaire, et le processus B la lecture de ce fichier
- Processus d'écriture de la pipe, et le processus B lecture à partir de ce tuyau
Je suis curieux de savoir quelle est la réponse pour Windows et *nix.
EDIT: j'ai dû poser la question: Ne le cache de tampons d'éliminer la différence entre un fichier temp et un tuyau?
Vous devez vous connecter pour publier un commentaire.
Une grande différence est que, avec le tube, les processus A et B peuvent être en cours d'exécution simultanément, de sorte que B obtient de travailler sur la sortie d'Un avant de Un a fini de le produire. De plus, la taille de la pipe est limitée, de sorte que l'Un ne sera pas en mesure de produire beaucoup plus de données que B a consommé; il sera fait attendre pour B de la rattraper.
Si le volume de données est grande, alors l'écriture pour le fichier temporaire implique l'activité du disque, même si seulement pour créer puis de détruire le fichier. Les données pourraient bien rester dans la mémoire tampon de piscines - donc pas de disque I/O - même pour étonnamment gros fichiers. De l'écriture à la pipe "jamais" implique l'écriture sur le disque.
La grande différence est que la première méthode utilise le stockage sur disque, alors qu'un tuyau d'utilisation de la mémoire (sauf si vous avez vraiment de pédant et de commencer à penser à propos de l'espace de swap).
De Performance, la mémoire est plus rapide que le disque (presque toujours). Cela devrait être généralement vrai pour tous les systèmes d'exploitation.
La seule fois lors de l'utilisation d'un fichier temp qui fait vraiment de sens est si le processus B est d'examiner les données en plusieurs passes (comme certains types de codage vidéo). Pour cette utilisation, l'ensemble du flux de données devra être mis en mémoire tampon et s'il y avait suffisamment de données oui, il serait probablement nier la mémoire avantage. Donc pour le multi-pass (seek) pour les opérations, rendez-vous avec un fichier temp.
Moins que ma compréhension de tuyaux en complètement à côté de la paroi, la réponse est OUI.
En écriture à un fichier temporaire implique l'accès au disque, et les frais généraux associés.
Écrit à un tuyau, et la lecture de ce, qui se passe dans la mémoire. Beaucoup plus rapide.
J'ai pensé à une réponse pratique peut aider. Je suis à la vitesse de l'optimisation d'un script que j'utilise, qui a environ 4 étapes. Je l'ai configuré pour utiliser de la tuyauterie et de la non-tuyauterie méthodes. C'est sous Windows 7 64 bits.
J'ai eu 3% de ralentissement pour ne pas utiliser de la tuyauterie. Qui en vaut la peine, pour moi, parce que maintenant je peux arrêter entre chaque étape et de mettre à jour le titre de la fenêtre, que je ne pouvais pas quand il était en une seule commande.
Personnellement, je vais prendre que 3% hit pour les titres de fenêtre.
Par curiosité, je suis grepping a >20M fichier, puis de le transmettre à une fenêtre de script perl qui modifie les résultats, puis de les trier à l'aide de windows construite en SORT.EXE puis uniq avec eux en utilisant cygwin est UNIQ.EXE, puis re-grepping ces mêmes résultats à obtenir en fonction de ANSI grep-résultat de coloration. La plupart du temps est passé dans la phase de tri sélectif.