Gibt es eine Möglichkeit in Haskell (mit GHC, wenn es darauf ankommt, für Code, der unter Linux und Windows ausgeführt werden muss), beschränkte Berechnungen durchzuführen? Das heißt, "berechne das Ergebnis dieser Funktion, wenn es machbar ist, aber wenn der Versuch mehr als X CPU-Zyklen, Y-Stapelspeicher oder Z-Stapelspeicherplatz verwendet hat und immer noch nicht beendet ist, halte an und gebe einen Hinweis darauf zurück war es nicht möglich, die Berechnung abzuschließen "?Begrenzte Berechnung in Haskell
Antwort
System.Timeout.timeout :: Int -> IO a -> IO (Maybe a)
Danke! Das sieht definitiv wie die Antwort für begrenzte Zeit aus. Wenn Sie diesen Teil der Dokumentation durchsehen, scheint es keine ähnliche Lösung für das Gedächtnis zu geben. – rwallace
In der Tat. Ich kann mir keine vernünftige Semantik für das Gedächtnis vorstellen, obwohl - neben der extremen Schwierigkeit, den Speicherverbrauch präzise zu messen, was ist, wenn es einen anderen Thread gibt, der nicht durch den Speicher eingeschränkt ist? Was passiert, wenn Sie einige Werte mit diesem anderen Thread teilen? wer "zahlt dafür"? Wie lösen Sie diese Probleme schnell genug, um Messungen zu erhalten, ohne die Funktion zu lähmen, die ausgeführt wird? –
Ja, das sind harte Probleme und ehrlich gesagt war ich nicht optimistisch in Bezug auf die Wahrscheinlichkeit, dass eine Mehrzwecksprache eine Standardlösung bietet, aber ich fand, dass es einen Versuch wert war, bevor ich mich mit meiner eigenen Speicherverwaltung hackte in C++ :-) – rwallace
Hier ist eine hackish Lösung Sie konnte try: laichen Ihre Berechnung mit forkIO
, und lassen Sie die Muttergewinde (oder einen Monitor-Thread, der den Zugriff auf die gegabelten Thread ThreadId
hat) in regelmäßigen Abständen abfragen jede Menge, die Sie wollen, und werfen Sie eine asynchrone Ausnahme auf den Computer-Thread wie nötig (interessanterweise, genau das ist, wie timeout
funktioniert.)
Die nächste Frage wäre, ob die Es ist eine Möglichkeit herauszufinden, wie groß der Heap derzeit in Haskell ist. Gesamtspeicherverbrauch und Zyklen können Sie herausfinden, indem Sie Shell-Befehle erzeugen oder das Betriebssystem auf andere Weise abfragen (ich würde nicht wissen, wie das unter Windows funktioniert).
Es ist keine perfekte Lösung, aber es ist einfach , die Sie in wenigen Minuten implementieren und testen können.
Ich war auf der Suche nach einer Speicher-in-Verwendung-Methode, konnte aber keine in Haskell finden. –
Anstatt die Heap-Verwendung des Forks zu überwachen, können Sie auch einfach den Heap mit 'RTS'opts begrenzen, oder? – leftaroundabout
'ForkIO' ist im selben Haskell-Programm. Wenn Sie keinen neuen Prozess generieren, arbeiten Sie innerhalb des freigegebenen Heapspeichers. –
Auf Prozess-Ebene können Sie GHC's RTS options verwenden, um maximale Stack- und Heap-Größen zu steuern.
- 1. Parallele Berechnung in Haskell
- 2. Haskell Kompilierzeit Funktion Berechnung
- 3. Gebunden die Laufzeit einer Berechnung in Haskell
- 4. Berechnung der Fläche der Kurve mit Haskell?
- 5. Random Haskell Bug. Berechnung beendet nie
- 6. Begrenzte Beziehungen in Laravel
- 7. Begrenzte Matrizen in Ruby
- 8. Wie verbessert man die Leistung dieser numerischen Berechnung in Haskell?
- 9. Wie die Berechnung der Typen in Haskell ist
- 10. RODBC-Verbindung - begrenzte Zeilen
- 11. Begrenzte Sockets zu Midp?
- 12. Begrenzte Ganzzahl Datentyp Feldlängen
- 13. UdpClient - begrenzte Puffergröße?
- 14. Begrenzte Geschwindigkeit von File.Copy
- 15. Begrenzte Anzahl der Knoten
- 16. Begrenzte kumulative Summe?
- 17. zeitlich begrenzte iOS-Funktion
- 18. Jquery sortierbar begrenzte Bewegung
- 19. Über 'pseq' in Haskell
- 20. Spiel Anführungszeichen begrenzte Zeichenfolge in vorherigem Spiel
- 21. Liste der Listen in begrenzte Zeichenfolge konvertieren
- 22. Ersetzen mehrere begrenzte Blöcke in sed
- 23. Begrenzte Platzhalter in der Klassendefinition funktionieren nicht?
- 24. eine begrenzte logarithmische Graph in Excel
- 25. Begrenzte Zeichen, die in span angezeigt werden
- 26. erstellt Vektor in qgis mit Begrenzte Textdatei
- 27. dyLimit für begrenzte Zeit in Dygraphs
- 28. HTTP-Statuscode für begrenzte Sammlung?
- 29. . NET eine begrenzte Textdatei schreiben
- 30. Post für eine begrenzte Zeit?
Bauen Sie ein Modellprüfwerkzeug? –
Unter anderem ja. – rwallace
Das könnte auch von Interesse sein: http://hackage.haskell.org/package/speculation – jberryman