我怎么会首先使用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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top