haskell - 如何将 TChan 邮箱附加到线程并使用套接字接收/发送消息?

标签 haskell

我想为线程手动创建 TChan 邮箱,其中传入的消息/网络数据包与来自本地线程的消息收集在同一队列中。

我不确定这里典型的 Haskell 方法是什么。我怎么能写从例如一个套接字到一个 TChan 邮箱?

那么它会是一个具有多个独立队列的邮箱吗?或者确实有几个邮箱?

我查看了 epass但还没试过。尽管我认为我想做的事情应该是可能的,但我并没有真正让我开始的详细想法。有没有人有类似的代码示例?

最佳答案

事实上,我怀疑你可能想得太多了。 TChan是一个非常简单的抽象,它本身只是一个惰性的数据结构。如果您想使用一个,只需让线程读/写使用它即可。

因此,要连接套接字,您可以简单地创建轮询套接字并将其中的任何内容写入 TChan 的代码。 .把它放在一个无限循环中,然后把它卷起来让它飞起来。 Haskell 的线程非常轻量级,不变性意味着并发问题大多不存在,所以除了小心不要使用阻塞 FFI 调用(这可能是套接字的一个问题,所以阅读文档)没有理由犹豫使用线程当他们说得通的时候。

如果你真的想要比这更高级的东西并找到一个可以工作的图书馆,也许 epass ,那么您真正想要的是该特定库的示例代码。

哦,对于它的值(value) - 实现 TChan本质上是一个由 TVar 组成的链表s 有两个引用,仅此而已。阅读将头指针向前移动,为 TChan 的任一副本留下较早的单元格。或垃圾收集器查找,并写入在尾指针处创建一个新单元格。当然,所有这些都是在 STM 事务中完成的。

关于haskell - 如何将 TChan 邮箱附加到线程并使用套接字接收/发送消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8478337/

相关文章:

testing - 如何在 haskell 中测试 count_if 函数

Haskell Lambda 帮助 - 从 lambda 术语输入中拆分术语

haskell - 单子(monad)的运算符关联性、关联律和值依赖性如何结合在一起?

haskell - 安装 System.FilePath.Find 时遇到问题

haskell - 如何通过 IO 操作在某些非 IO monad 中惯用且有效地使用 Pipe?

language-agnostic - 一个 REPL 将它们全部绑定(bind)?

Haskell 稀有模式匹配

Haskell 编码风格 : map, fmap 或 <$>?

haskell - 我如何指示 cabal-install 或 stack 使用 hackage 包的本地版本?

haskell - GHC 7.8 中类型级别自然的行为