如何在Haskell中的父进程和分叉子进程之间共享数据?
-
04-07-2019 - |
题
我怎么会首先使用Haskell来分配子进程?
另外,如果管道是数据共享问题的明显解决方案 - 除了使用管道之外还有其他方法吗?我熟悉在C中使用共享内存段(shmget,* shmat,shmdt和shmctl函数)。哈斯克尔能够模仿这个吗?如果是这样,怎么样?
我非常感谢您可以提供的任何帮助。
我必须承认我对函数式编程语言非常陌生,在Haskell方面更是如此。如果我说傻话,请原谅我(请纠正我)。
解决方案
更好的是,使用软件事务内存 - 即TVars和TChannels。
将推荐同一本书,不同章节: http:// book。 realworldhaskell.org/read/software-transactional-memory.html
以下是此技术的一个很好的小例子: http://sequence.complete.org /节点/ 257
其他提示
OP询问与子进程通信,而不是线程。为此,管道是一种非常好的方式。如果你愿意,你也可以直接从Haskell调用C库函数,尽管这可能会变得棘手。
这个问题有一个更好的答案:是否有一些标准的Haskell库处理流程通信?
使用MVars或频道。请参阅RealWorld Haskell的第24章: http://book.realworldhaskell.org/read/concurrent-and-多核programming.html
如果你想实际分叉一个进程,Unix风格,你需要使用 forkProcess .2.0 / docs / System-Posix-Process.html“rel =”nofollow“> http://hackage.haskell.org/package/unix-2.4.2.0/docs/System-Posix-Process.html
在这种情况下,MVars和TVars不进行进程间通信,因此您无法使用它们来进行IPC。 IPC(管道,插座等)的所有标准技术仍然有效。如果您想要更高级别的内容,请查看Cloud Haskell http://www.haskell.org/haskellwiki/ Cloud_Haskell