我想为线程手动创建 TChan 邮箱,其中传入的消息/网络数据包与来自本地线程的消息收集在同一队列中。
我不确定这里典型的 Haskell 方法是什么。我怎么能写从例如一个套接字到一个 TChan 邮箱?
那么它会是一个具有多个独立队列的邮箱吗?或者确实有几个邮箱?
我查看了 epass但还没试过。尽管我认为我想做的事情应该是可能的,但我并没有真正让我开始的详细想法。有没有人有类似的代码示例?
最佳答案
事实上,我怀疑你可能想得太多了。 TChan
是一个非常简单的抽象,它本身只是一个惰性的数据结构。如果您想使用一个,只需让线程读/写使用它即可。
因此,要连接套接字,您可以简单地创建轮询套接字并将其中的任何内容写入 TChan
的代码。 .把它放在一个无限循环中,然后把它卷起来让它飞起来。 Haskell 的线程非常轻量级,不变性意味着并发问题大多不存在,所以除了小心不要使用阻塞 FFI 调用(这可能是套接字的一个问题,所以阅读文档)没有理由犹豫使用线程当他们说得通的时候。
如果你真的想要比这更高级的东西并找到一个可以工作的图书馆,也许 epass
,那么您真正想要的是该特定库的示例代码。
哦,对于它的值(value) - 实现 TChan
本质上是一个由 TVar
组成的链表s 有两个引用,仅此而已。阅读将头指针向前移动,为 TChan
的任一副本留下较早的单元格。或垃圾收集器查找,并写入在尾指针处创建一个新单元格。当然,所有这些都是在 STM 事务中完成的。
关于haskell - 如何将 TChan 邮箱附加到线程并使用套接字接收/发送消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8478337/