Haskell에서 상위 프로세스와 분기된 하위 프로세스 간에 데이터를 어떻게 공유합니까?

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

  •  04-07-2019
  •  | 
  •  

문제

처음에 Haskell을 사용하여 하위 프로세스를 포크하려면 어떻게 해야 할까요?

또한 파이프가 데이터 공유 문제에 대한 확실한 해결책이라면 파이프를 사용하는 것 외에 다른 방법이 있습니까?나는 C의 공유 메모리 세그먼트(shmget, *shmat, shmdt 및 shmctl 함수) 사용에 익숙합니다.하스켈이 이것을 모방할 수 있을까요?그렇다면 어떻게?

도움을 주시면 정말 감사하겠습니다.

나는 함수형 프로그래밍 언어에 대해 매우 익숙하지 않다는 점을 인정해야 합니다. Haskell에 관해서라면 더욱 그렇습니다.그러므로 제가 어리석은 말을 했다면 용서해 주십시오(그리고 정정해 주십시오).

도움이 되었습니까?

해결책

더 나은 것은 소프트웨어 트랜잭션 메모리, 즉 TVARS 및 TCHANNEL을 사용하십시오.

동일한 책인 다른 장을 추천합니다. http://book.realworldhaskell.org/read/software-transactional-memory.html

다음은이 기술의 좋은 작은 예입니다. http://sequence.complete.org/node/257

다른 팁

OP는 스레드가 아닌 하위 프로세스와의 의사 소통에 대해 물었습니다. 이를 위해 파이프는 완벽하게 좋은 방법입니다. 원한다면 Haskell에서 직접 C 라이브러리 기능을 호출 할 수도 있지만 까다로울 수 있습니다.

이 질문은 여기에 더 나은 답변이 있습니다. 프로세스 커뮤니케이션을 다루는 표준 Haskell 라이브러리가 있습니까?

MVAR 또는 채널을 사용하십시오. RealWorld Haskell의 24 장을 참조하십시오. http://book.realworldhaskell.org/read/concurrent-and-multicore-programming.html

실제로 프로세스를 Unix 스타일로 분기하려면 다음을 사용해야 합니다. forkProcess 에 의해 주어진대로 http://hackage.haskell.org/package/unix-2.4.2.0/docs/System-Posix-Process.html

이 경우 MVar 및 TVar는 프로세스 간 통신을 수행하지 않으므로 IPC를 수행하는 데 사용할 수 없습니다.IPC(파이프, 소켓 등)의 모든 표준 기술은 여전히 ​​작동합니다.좀 더 높은 수준의 것을 원한다면 Cloud Haskell을 확인하십시오. http://www.haskell.org/haskellwiki/Cloud_Haskell

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top