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