6

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

buildFdSets:文件描述符超出范围

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

我的问题是:

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

2 回答 2

4

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

论文链接描述性博客文章

然而,GHC 7 的 Haskell 平台尚未推出。

于 2010-11-19T14:09:35.290 回答
3

您可以简单地升级到 GHC 7,它是Haskell 平台的一部分,其中包括

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

尤其是:

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

也就是说,只需升级,事情就会神奇地工作得更好。

这里有一些阅读材料:

于 2011-05-02T21:36:59.857 回答