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

我不确定典型的Haskell方法会是什么。我该如何写TChan邮箱的套接字?

那么它将成为具有多个单独队列的一个邮箱吗?还是实际上有几个邮箱?

我已经研究了epass,但尚未尝试。尽管我认为我想做的事情应该完全可行,但我并没有真正详细的想法让我入门。有人有类似的代码示例吗?

最佳答案

实际上,我怀疑您可能对此有所考虑。 TChan是一个非常简单的抽象,仅是一个惰性数据结构。如果您想使用一个,只需让线程适本地对其进行读/写操作即可。

因此,要连接套接字,您只需创建可轮询该套接字并将其中的任何内容写入TChan的代码。将其无限循环,然后将其缠绕并使其飞行。 Haskell的线程相当轻巧,并且不可变,这意味着并发头痛几乎不存在,因此除了小心不要使用阻塞FFI调用(这可能与套接字有关,请阅读文档),没有任何理由要使用线程当他们说得通的时候。

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

哦,这有什么意思,TChan的实现实质上是一个由TVar组成的链表,其中包含两个引用,仅此而已。读取使头部指针向前移动,留下较早的单元格供TChan的副本或垃圾回收器查找,而写入则在尾部指针处创建一个新单元格。当然,所有这些都是在STM事务中完成的。

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

10-11 04:22