Como seria um compartilhar dados entre um pai e processo filho bifurcada em Haskell?

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

  •  04-07-2019
  •  | 
  •  

Pergunta

Como eu poderia até mesmo ir sobre bifurcação um processo filho usando Haskell, em primeiro lugar?

Além disso, se tubos são uma solução óbvia para a questão da partilha de dados - existe alguma outra maneira de fazer isso além de usar tubos? Estou familiarizado com o uso de segmentos compartilhados de memória em C (a shmget, shmat *, funções shmdt e shmctl). Poderia Haskell ser capaz de imitar esse? Se sim, como?

Eu ficaria muito grato por qualquer ajuda que você poderia poupar.

Devo admitir que eu sou muito novo para linguagens de programação funcional, ainda mais quando se trata de Haskell. Então me perdoe (e por favor me correto) se eu disse algo bobo.

Foi útil?

Solução

Melhor ainda, o uso de Software Transactional memória - que é, TVARS e TChannels.

O recomendaria o mesmo livro, capítulo diferente: http: // livro. realworldhaskell.org/read/software-transactional-memory.html

Aqui está um bom pequeno exemplo desta técnica em ação: http://sequence.complete.org / node / 257

Outras dicas

O OP perguntou sobre a comunicação com um subprocesso, não um fio. Para isso, os tubos são um perfeitamente bem maneira de fazê-lo. Você também pode chamar a função de biblioteca C diretamente de Haskell, se você quiser, apesar de que poderia ficar complicado.

Esta questão tem uma resposta melhor ao longo aqui: existe algum padrão negociação biblioteca Haskell com a comunicação processo?

uso MVars ou Canais. Veja capítulo 24 do RealWorld Haskell: http://book.realworldhaskell.org/read/concurrent-and- multicore-programming.html

Se você quiser realmente desembolsar um processo, estilo Unix, você precisa usar forkProcess como dado por http://hackage.haskell.org/package/unix-2.4.2.0/docs/System-Posix-Process.html

Neste caso, MVars e TVARS não fazem comunicação entre processos, para que você não pode usá-los para fazer IPC. Todas as técnicas padrão para IPC (tubos, tomadas, etc.) ainda funcionam. Se você quiser algo mais alto nível, veja a nuvem Haskell http://www.haskell.org/haskellwiki/ Cloud_Haskell

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top