Wie würde man Daten zwischen einem Elternteil und abgezweigten Kind Prozess in Haskell teilen?

StackOverflow https://stackoverflow.com/questions/238379

  •  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.

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top