並行アプリケーションを作成し、エラーを見つけました:
buildFdSets:ファイル記述子が範囲外です
私のFreeBSDでは、1つのプロセスでのファイル記述子の数に対するOSの制限であることがわかりました1024
。の限界ですselect()
。また、別のアプローチがあることも学びましたkqueue()
。
私の質問は次のとおりです。
- ファイル記述子の制限を勝ち取る方法は?
- haskellプログラム
kqueue()
の代わりに使用する方法は?select()
並行アプリケーションを作成し、エラーを見つけました:
buildFdSets:ファイル記述子が範囲外です
私のFreeBSDでは、1つのプロセスでのファイル記述子の数に対するOSの制限であることがわかりました1024
。の限界ですselect()
。また、別のアプローチがあることも学びましたkqueue()
。
私の質問は次のとおりです。
kqueue()
の代わりに使用する方法は?select()
Haskellプラットフォームの一部であるGHC7にアップグレードするだけで、次のものが含まれます。
POSIXプラットフォームには、epoll / kqueue/pollに基づく新しいI/Oマネージャーがあります。これにより、マルチスレッドI / Oコードをはるかに多数(100k以上)のスレッドに拡張できます。
特に:
アーキテクチャ上、新しいI/Oマネージャーは2つのコンポーネントで構成されています。イベント通知ライブラリは、クリーンでポータブルなAPIを提供し、効率的なイベント通知(kqueue、epoll、poll)を提供するために使用されるシステムレベルのメカニズムを抽象化します。また、セミパブリックのthreadWaitReadおよびthreadWaitWriteインターフェイスを実装するシムも作成しました。これは、コアファイルやネットワークライブラリ、その他の低レベルI / Oライブラリのいずれも、新しいコードを操作するために変更を必要とせず、パフォーマンスの向上から透過的に恩恵を受けることを意味します。
つまり、アップグレードするだけで、魔法のようにうまく機能します。
ここにいくつかの読み物があります: