kqueue上的Haskell并发

kqueue上的Haskell并发,haskell,concurrency,epoll,kqueue,Haskell,Concurrency,Epoll,Kqueue,我编写了并发应用程序,发现了错误: buildFdSets:文件描述符超出范围 我发现这是操作系统对一个进程中文件描述符数量的限制,在我的FreeBSD中是1024。这是select()的限制。我还了解到还有另一种方法:kqueue() 我的问题是: 如何赢得对文件描述符的限制 如何在haskell程序中使用kqueue()而不是select() 我相信GHC 7现在支持在其后端使用kqueue(): ,, 但是,Haskell平台尚未推出GHC 7。您可以简单地升级到GHC 7,它是的一部

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

buildFdSets:文件描述符超出范围

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

我的问题是:

  • 如何赢得对文件描述符的限制
  • 如何在haskell程序中使用
    kqueue()
    而不是
    select()

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

,,


但是,Haskell平台尚未推出GHC 7。

您可以简单地升级到GHC 7,它是的一部分,其中:

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

特别是:

在体系结构上,我们的新I/O管理器由两个组件组成。我们的事件通知库提供了一个干净、可移植的API, 并抽象出用于提供有效信息的系统级机制 事件通知(kqueue、epoll和poll)。我们还编写了一个实现半公共threadWaitRead和 threadWaitWrite接口。这意味着核心文件 或网络库,或其他低级I/O库,都需要 任何与我们的新代码一起工作的更改都会从我们的新代码的性能改进中明显受益

也就是说,只要升级,事情就会神奇地变得更好

以下是一些阅读材料: