Je l'ai lu plusieurs fois que l'évaluation paresseuse dans Haskell peut parfois conduire à des fuites d'espace. Quel type de code peut conduire à des fuites d'espace? Comment les détecter? Et quelles précautions peuvent être prises sur une partie d'un programmeur pour les éviter?Fuites d'espace dans Haskell
Répondre
Vous obtiendrez probablement beaucoup de réponses, c'est celui que j'ai rencontré en essayant de faire une application 'monde réel'. J'utilisais le multithreading et certains MVars pour transmettre des données (MVar est quelque chose comme de la mémoire partagée verrouillée). Mon modèle typique était:
a <- takeMVar mvar
putMVar mvar (a + 1)
Et puis, juste parfois, quand un bon état est arrivé, je l'ai fait quelque chose comme:
a <- takeMVar mvar
when (a > 10) ....
Le problème est que le contenu de Mvar était essentiellement (0 + 1 + 1 + 1 + ....) ... ce qui était assez intensif pour des nombres comme 100k ... Ce type de problème était très répandu dans mon code; Malheureusement, pour les applications multithread, il est très facile d'entrer dans de tels problèmes.
Détection ... ce que je ne commençais haskell en mode qui produit des données concernant la consommation de mémoire, le démarrage et l'arrêt de différents fils et regarder si l'empreinte mémoire est stable ou non ...
Anotomy of a thunk leak (with instructions how to debug it)
Un exemple: Thunk memory leak as a result of map function
J'ai rencontré ce problème lors de la récursion sur de grandes structures de données. Les thunks accumulés peuvent être trop et alors vous obtenez une fuite d'espace.
Dans Haskell, vous devez être constamment conscient de la possibilité de courir dans une fuite d'espace. Puisque l'itération n'existe pas, n'importe quelle fonction récursive a le potentiel de générer une fuite d'espace.
Pour éviter ce problème, notez les fonctions récursives ou réécrivez-les de manière récursive.
- 1. Programmation socket Haskell - fuites de mémoire
- 2. Fuites dans NSURLConnection
- 3. fuites mémoire dans MyFaces
- 4. Fuites dans l'objectif-C
- 5. Fuites instrument
- 6. fuites NSFileManager
- 7. Fuites de mémoire dans l'iPhone
- 8. Fuites de mémoire dans l'application
- 9. Instruments - fuites dans l'application iPad
- 10. NSMutableArray Fuites dans la boucle
- 11. Comment analyser la source Haskell dans un AST dans Haskell?
- 12. Haskell
- 13. code correspondant à des fuites avec Visual Détecteur de fuites
- 14. Les arbres dans Haskell
- 15. Valeur NILL dans haskell
- 16. Calcul parallèle dans Haskell
- 17. itérations complexes dans haskell
- 18. Utilisation Fractions dans Haskell
- 19. Que signifie `~` dans Haskell?
- 20. Haskell: grille dans wxHaskell
- 21. Sérialisation générique dans Haskell
- 22. Priorité d'opérateur dans Haskell
- 23. Parse XML dans Haskell
- 24. Application sécurisée dans Haskell
- 25. autoréférence dans Haskell fonctionne
- 26. Fonction d'erreur dans Haskell
- 27. Client Websocket dans Haskell?
- 28. Projets utiles dans Haskell
- 29. Représentation graphique dans Haskell
- 30. importation Liste dans haskell
Jetez un coup d'œil à [Space leak zoo] d'Edward Z. Yang (http://blog.ezyang.com/2011/05/space-leak-zoo/). –