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

J F*_*sch 5 haskell

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

我不确定Haskell的典型方法是什么.如何从插槽写入TChan邮箱?

它会是一个有几个独立队列的邮箱吗?或者在几个邮箱中?

我已经看过epass但还没试过.尽管如此,我想我应该做的事情应该是可能的,我还没有真正详细的想法让我开始.有没有人有类似的代码示例?

C. *_*ann 4

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

因此,要连接套接字,您只需创建轮询套接字并将任何内容写入TChan. 将其置于无限循环中,然后将其卷紧并让它飞翔。Haskell 的线程非常轻量级,并且不变性意味着并发问题大多不存在,因此除了小心不要使用阻塞 FFI 调用(这可能是套接字的问题,因此请阅读文档)之外,没有理由犹豫使用线程当它们有意义时。

如果您确实想要比这更奇特的东西并找到一个可以工作的库epass,那么您真正想要的是该特定库的示例代码。

哦,对于它的价值来说, 的实现TChan本质上是一个由 s 组成的链表,TVar其中有两个引用,仅此而已。读取将头指针向前移动,将较早的单元单独留下来供垃圾收集器TChan或垃圾收集器的副本查找,而写入则在尾指针处创建一个新单元。当然,所有这些都是在 STM 交易中完成的。