Domanda

Come potrei persino fare un fork di un processo figlio usando Haskell in primo luogo?

Inoltre, se le pipe sono una soluzione ovvia alla domanda sulla condivisione dei dati, esiste un altro modo per farlo oltre all'utilizzo delle pipe? Ho familiarità con l'uso di segmenti di memoria condivisa in C (le funzioni shmget, * shmat, shmdt e shmctl). Haskell potrebbe essere in grado di imitarlo? In tal caso, come?

Sarei molto grato per qualsiasi aiuto tu possa risparmiare.

Devo ammettere che sono molto nuovo nei linguaggi di programmazione funzionale, tanto più quando si tratta di Haskell. Quindi perdonami (e per favore correggimi) se ho detto qualcosa di stupido.

È stato utile?

Soluzione

Meglio ancora, usa la memoria transazionale del software, ovvero TVars e TChannel.

Raccomanderà lo stesso libro, capitolo diverso: http: // libro. realworldhaskell.org/read/software-transactional-memory.html

Ecco un buon esempio di questa tecnica in azione: http://sequence.complete.org / nodo / 257

Altri suggerimenti

L'OP ha chiesto di comunicare con un sottoprocesso, non con un thread. Per questo, i tubi sono un modo perfetto per farlo. Puoi anche chiamare la funzione di libreria C direttamente da Haskell se vuoi, anche se potrebbe essere complicato.

Questa domanda ha una risposta migliore qui: Esiste una libreria Haskell standard che si occupa della comunicazione di processo?

usa MVars o Canali. Vedi il capitolo 24 di RealWorld Haskell:    http://book.realworldhaskell.org/read/concurrent-and- multicore-programming.html

Se vuoi effettivamente fork un processo, in stile Unix, devi usare forkProcess come indicato da http://hackage.haskell.org/package/unix-2.4.2.0/docs/System-Posix-Process.html

In questo caso, MVars e TVars non effettuano comunicazioni tra processi, quindi non è possibile utilizzarli per eseguire IPC. Tutte le tecniche standard per IPC (tubi, prese, ecc.) Funzionano ancora. Se vuoi qualcosa di più di alto livello, dai un'occhiata a Cloud Haskell http://www.haskell.org/haskellwiki/ Cloud_Haskell

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top