2010-11-24 19 views
3

J'ai été récemment downvoted (qui m'a seulement embêté un peu :)) pour une réponse que j'ai donné à this question. La personne n'a offert aucune explication pour le vote en baisse qui m'a commencé à penser: "Pourquoi éviteriez-vous de produire des fichiers intermédiaires?" Surtout dans une langue comme Python où File IO est ridiculement facile.Les fichiers intermédiaires sont-ils une mauvaise pratique?

Il semblait y avoir consensus sur le fait que c'était une mauvaise idée, mais je sais pertinemment que les fichiers intermédiaires sont utilisés régulièrement dans la pratique. J'ai travaillé pour un cabinet de recherche très respecté (disons que S.O. n'existerait pas sans cette firme) où l'on supposait que vos programmes produiraient des fichiers en sortie. Nous avons fait cela parce que si votre programme devait être un programme autonome, alors il aurait besoin d'une sortie débogable et d'un moyen de passer sa sortie entre les processus qui pourraient être examinés plus tard si nous découvrions une erreur dans notre sortie plus en aval.

Est-il considéré comme une mauvaise pratique (dans les cas comme la question ci-dessus) d'utiliser des fichiers intermédiaires? Pourquoi?

Répondre

2

Un problème avec les fichiers intermédiaires se produit lors de l'exécution de plusieurs threads. Si les clients C1 et C2 sont gérés simultanément par le processus serveur S (qui peut ou non avoir été divisé en processus séparés, threads utilisés ou tout autre système de concurrence), vous pouvez rencontrer des problèmes bizarres lorsque vous essayez de créer le même fichier intermédiaire. Je crois que l'une des philosophies d'Unix est que tous les programmes devraient agir comme des filtres, mais cela ne signifie pas nécessairement créer des fichiers sur le disque, et l'utilisation de fichiers intermédiaires conduit à un comportement compliqué à mon avis. Il convient également de traiter le disque en dernier recours et de ne l'utiliser que pour stocker/récupérer des données qui devraient être disponibles après la mise hors tension de l'ordinateur, et peut-être même prendre soin de permettre aux programmes de s'exécuter en lecture seule.

+0

Je voudrais cette réponse (au moins votre premier paragraphe) sauf à mon travail, nous courions jusqu'à 800 programmes en parallèle en utilisant des fichiers pour communiquer entre les processus ... :) +1 de toute façon pour la raison derrière downvote de l'autre personne . Quelqu'un d'autre? – Crisfole

+0

Peut-être que vous pouvez commenter sur les mesures que vous avez prises pour éviter certains problèmes de concurrence au lieu de promouvoir des downvotes? :) – buddhabrot

+1

Promouvoir les downvotes? Mon +1 était parce que vous avez répondu à la question. Je désapprouve les downvotes à moins que la réponse soit vraiment * mauvaise *. – Crisfole

0

Si vous créez correctement des fichiers temporaires (en définissant un drapeau 'temporaire' spécifique à la plate-forme, ne videz pas le cache sur le disque si vous n'en avez pas besoin), ils sont parfaitement adaptés.

Il n'y a presque pas de choses dans l'informatique que vous ne pouvez pas utiliser en ayant une bonne raison de le faire. :-)

1

Eh bien, il y a quelques problèmes lorsque vous utilisez des fichiers, en particulier il peut y avoir de nombreux échecs inattendus lors de l'accès ou de la création des fichiers. Les éléments suivants sont tous les problèmes que j'ai personnellement rencontrés.

1) L'emplacement du fichier est sur la machine distante et le réseau est en panne. (NFS monté).
2) Il n'y a pas assez d'espace libre lors de la création du fichier.
3) Entre le processus, l'utilisateur appuie sur Ctrl-C pour annuler le processus, le fichier n'est pas supprimé.
4) Le fichier est monté sur le NFS et le réseau est lent.
5) Le dossier dans lequel le fichier a été créé était un lien logiciel et le lien d'origine a été supprimé.

Mais nous devons toujours utiliser le fichier car il n'y a pratiquement pas d'options lorsque nous travaillons dans bash. Mais en C, C++ je pense que l'accès au disque devrait être considéré comme le dernier recours. Programme produire des fichiers en sortie est ok, si c'est le seul moyen de communiquer avec l'utilisateur. Mais au moins pour les économies intermédiaires, l'utilisation des fichiers de disque devrait être minimisée.