我编写了并发应用程序并捕获了错误:
buildFdSets:超出范围的文件描述符
我发现这是操作系统对一个进程中文件描述符数量的限制,在我的FreeBSD中是1024。这是select()的极限。此外,我还了解到还有另一种方法:kqueue()。
我的问题是:
kqueue()而不是select()?发布于 2010-11-19 14:09:35
我相信GHC 7现在支持在后端使用kqueue():
链接到纸上,描述性博客文章
然而,Haskell平台还没有推出GHC 7。
发布于 2011-05-02 21:36:59
您可以简单地升级到GHC 7,这是Haskell平台的一部分,其中的包括
在POSIX平台上,有一个基于epoll/kqueue/轮询的新I/O管理器,它允许多线程I/O代码扩展到更多的线程(100k+)。
特别是:
在架构上,我们的新I/O管理器由两个组件组成。我们的事件notifi阳离子库提供了一个干净的、可移植的API,并抽象了用于提供effi阳离子(kqueue、epoll和轮询)的系统级机制。我们还编写了一个实现半公共threadWaitRead和threadWaitWrite接口的shim。这意味着核心file或网络库以及其他低级I/O库都不需要任何更改来处理--并且透明地使fit从新代码的性能改进中获益。
也就是说,只要升级,事情就会神奇地变得更好。
以下是一些阅读材料:
https://stackoverflow.com/questions/4225589
复制相似问题