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

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

我不确定Haskell的典型方法是什么.如何从例如一个TChan邮箱的套接字?

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

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

最佳答案
实际上,我怀疑你可能会过度思考这一点. TChan是一个非常简单的抽象,它本身只是一个惰性数据结构.如果要使用一个,只需根据需要使用它读取/写入线程.

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

如果你真的想要比这更漂亮的东西并找到一个可以工作的库,也许是epass,那么你真正想要的是该特定库的示例代码.

哦,以及它的价值 – TChan的实现本质上是一个由TVars组成的链表,其中有两个引用,仅此而已.读取将头指针向前移动,将早期单元格单独留给TChan或垃圾收集器的任何副本来查找,并且写入在尾指针处创建新单元.当然,所有这些都是在STM交易中完成的.

转载注明原文:haskell – 如何将一个TChan邮箱附加到线程并使用套接字接收/发送消息? - 代码日志