我编写了并发应用程序并发现了错误:
buildFdSets:文件描述符超出范围
我发现这是操作系统对一个进程中文件描述符数量的限制,在我的FreeBSD中是1024
. 是的极限select()
。我还了解到还有另一种方法:kqueue()
.
我的问题是:
- 如何赢得文件描述符的限制?
- 如何在haskell程序中使用
kqueue()
而不是使用?select()
我编写了并发应用程序并发现了错误:
buildFdSets:文件描述符超出范围
我发现这是操作系统对一个进程中文件描述符数量的限制,在我的FreeBSD中是1024
. 是的极限select()
。我还了解到还有另一种方法:kqueue()
.
我的问题是:
kqueue()
而不是使用?select()
您可以简单地升级到 GHC 7,它是Haskell 平台的一部分,其中包括:
在 POSIX 平台上,有一个基于 epoll/kqueue/poll 的新 I/O 管理器,它允许多线程 I/O 代码扩展到更大数量(100k+)的线程
尤其是:
在架构上,我们的新 I/O 管理器由两个组件组成。我们的事件通知库提供了一个干净且可移植的 API,并抽象了用于提供有效事件通知(kqueue、epoll 和 poll)的系统级机制。我们还编写了一个实现半公共 threadWaitRead 和 threadWaitWrite 接口的 shim。这意味着无论是核心文件或网络库,还是其他低级 I/O 库,都不需要任何更改才能使用我们的新代码,并且可以明显地受益于性能改进。
也就是说,只需升级,事情就会神奇地工作得更好。
这里有一些阅读材料: