¿Cómo se compartirían los datos entre un padre y un proceso bifurcado en Haskell?
-
04-07-2019 - |
Pregunta
¿Cómo podría siquiera empezar a forzar un proceso secundario utilizando Haskell en primer lugar?
Además, si las tuberías son una solución obvia a la pregunta de intercambio de datos, ¿hay alguna otra forma de hacerlo además de usar tuberías? Estoy familiarizado con el uso de segmentos de memoria compartida en C (las funciones shmget, * shmat, shmdt y shmctl). ¿Podría Haskell ser capaz de imitar esto? Si es así, ¿cómo?
Estaría muy agradecido por cualquier ayuda que pueda ahorrar.
Debo admitir que soy muy nuevo en los lenguajes de programación funcionales, más aún cuando se trata de Haskell. Así que perdóname (y corríjame) si dije algo tonto.
Solución
Mejor aún, use Software Transactional Memory, es decir, TVars y TChannels.
Recomendará el mismo libro, capítulo diferente: http: // book. realworldhaskell.org/read/software-transactional-memory.html
Aquí hay un buen pequeño ejemplo de esta técnica en acción: http://sequence.complete.org / node / 257
Otros consejos
El OP preguntó sobre la comunicación con un subproceso, no con un hilo. Para eso, las tuberías son una forma perfectamente fina de hacerlo. También puede llamar a la función de la biblioteca C directamente desde Haskell si lo desea, aunque eso podría ser complicado.
Esta pregunta tiene una mejor respuesta aquí: ¿Hay alguna biblioteca estándar de Haskell que se ocupe de la comunicación de procesos?
usa MVars o Channels. Vea el capítulo 24 de RealWorld Haskell: http://book.realworldhaskell.org/read/concurrent-and- multicore-schedule.html
Si realmente quieres unir un proceso, al estilo de Unix, necesitas usar forkProcess
como se indica en http://hackage.haskell.org/package/unix-2.4.2.0/docs/System-Posix-Process.html
En este caso, MVars y TVars no realizan comunicación entre procesos, por lo que no puede usarlos para hacer IPC. Todas las técnicas estándar para IPC (tuberías, enchufes, etc.) aún funcionan. Si quieres algo más de alto nivel, visita Cloud Haskell http://www.haskell.org/haskellwiki/ Cloud_Haskell