Wie würde man Daten zwischen einem Elternteil und abgezweigten Kind Prozess in Haskell teilen?
-
04-07-2019 - |
Frage
Wie würde ich mich auch über einen untergeordneten Prozess Forking mit Haskell in erster Linie?
Auch wenn Rohre sind eine offensichtliche Lösung für die Frage gemeinsamen Nutzung von Daten - ist es eine andere Art und Weise es neben der Verwendung Rohre zu tun? Ich bin mit der Verwendung von Shared-Memory-Segmenten in C vertraut (die shmget, * shmat, shmdt und shmctl Funktionen). Könnte Haskell Lage sein, dies zu imitieren? Wenn ja, wie?
Ich wäre sehr dankbar für jede Hilfe Sie ersparen könnte.
Ich muss zugeben, dass ich zu funktionalen Programmiersprachen sehr neu bin, umso mehr, wenn es um Haskell kommt. Also verzeiht mir (und bitte korrigieren Sie mich), wenn ich sagte etwas albern.
Lösung
Noch besser wäre es, verwenden Software Transactional Memory - das heißt, TVars und TChannels.
Wird das gleiche Buch, verschiedene Kapitel empfehlen: http: // Buch. realworldhaskell.org/read/software-transactional-memory.html
Hier ist ein gutes kleines Beispiel für diese Technik in Aktion: http://sequence.complete.org / node / 257
Andere Tipps
Die OP fragte mit einem Teilprozess über die Kommunikation, kein Gewinde. Dafür Rohre sind völlig in Ordnung, Art und Weise tun. Sie können auch direkt aus Haskell die C-Bibliothek-Funktion aufrufen, wenn Sie wollen, aber das ist knifflig könnte.
Diese Frage hat eine bessere Antwort hier: gibt es eine Standard-Haskell-Bibliothek Umgang mit Prozesskommunikation?
Verwendung MVar oder Kanäle. Siehe Kapitel 24 des Real World Haskell: http://book.realworldhaskell.org/read/concurrent-and- Multi-Core-programming.html
Wenn Sie möchten, um tatsächlich einen Prozess Gabel, Unix-Stil, müssen Sie forkProcess
verwenden, wie von http://hackage.haskell.org/package/unix-2.4.2.0/docs/System-Posix-Process.html
In diesem Fall MVar und TVars nicht tun Interprozess-Kommunikation, so dass Sie sie nicht IPC tun können. Alle Standardtechniken für die IPC (Rohre, Buchsen, etc.) immer noch funktionieren. Wenn Sie etwas mehr High-Level wollen Besuche Wolke Haskell http://www.haskell.org/haskellwiki/ Cloud_Haskell