Haskell在kqueue上的并发性

时间:2010-11-19 13:49:18

标签: haskell concurrency epoll kqueue

我编写并发应用程序并发现了错误:

  

buildFdSets:文件描述符超出范围

我发现在一个进程中,操作系统限制了文件描述符的数量,在我的 FreeBSD 中它是1024。这是select()的限制。我还了解到还有另一种方法:kqueue()

我的问题是:

  • 如何赢取文件描述符的限制?
  • 如何在haskell程序中使用kqueue()代替select()

2 个答案:

答案 0 :(得分:4)

我相信GHC 7现在支持在它的后端使用kqueue():

link to paperdescriptive blog post

然而,Haskell平台尚未用于GHC 7。

答案 1 :(得分:3)

您可以升级到GHC 7,它是the Haskell Platform的一部分,includes

  

在POSIX平台上,有一个基于epoll / kqueue / poll的新I / O管理器,它允许多线程I / O代码扩展到更大数量(100k +)的线程

特别是:

  

在架构上,我们的新I / O管理器由两个组件组成。我们的事件通知库提供了一个干净,可移植的API,   并提取用于提供高效率的系统级机制   事件通知(kqueue,epoll和民意调查)。我们还编写了一个实现半公共threadWaitRead和的垫片   threadWaitWrite接口。这意味着既不是核心文件   或网络库,或其他低级I / O库,需要   任何与我们的新代码的性能改进有关并且透明地受益的改变。

也就是说,只需升级,事情就会变得更好。

以下是一些阅读材料: