我编写并发应用程序并发现了错误:
buildFdSets:文件描述符超出范围
我发现在一个进程中,操作系统限制了文件描述符的数量,在我的 FreeBSD 中它是1024
。这是select()
的限制。我还了解到还有另一种方法:kqueue()
。
我的问题是:
kqueue()
代替select()
?答案 0 :(得分:4)
答案 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库,需要 任何与我们的新代码的性能改进有关并且透明地受益的改变。
也就是说,只需升级,事情就会变得更好。
以下是一些阅读材料: