WindowsとLinuxの両方に実装された、ブーストソケットに似たasio拡張機能を作成しようとしています。拡張機能は、Linux用のEIBDを使用してKNXネットワークと対話するために使用されます。問題は、複数のファイル記述子を監視する方法です。select()を使用する場合、FD_SETSIZE制限を回避する方法は?
Boostはソケット実装でこれをどのように処理しますか?私の知る限り、WindowsではIO完了ポートを使用しています。
WindowsとLinuxの両方に実装された、ブーストソケットに似たasio拡張機能を作成しようとしています。拡張機能は、Linux用のEIBDを使用してKNXネットワークと対話するために使用されます。問題は、複数のファイル記述子を監視する方法です。select()を使用する場合、FD_SETSIZE制限を回避する方法は?
Boostはソケット実装でこれをどのように処理しますか?私の知る限り、WindowsではIO完了ポートを使用しています。
私の質問に対する簡単な答えは、epollを使用することです。ウィキペディアによると、epollはLinux用のスケーラブルなI / Oイベント通知メカニズムであり、Linuxカーネル2.5.44で最初に導入されました。
select(2)は、一度に最大FD_SETSIZEの記述子を監視できます。通常は、libcのコンパイル時に少数が決定されます。代わりに、epollにはそのような固定制限がなく、線形スキャンを実行しません。したがって、パフォーマンスが向上し、より多くのイベントを処理できます。
epollの使用方法に関するチュートリアルについては、banu.com / blog / 2 /how-to-use-epoll-a-complete-example-in-c/にアクセスしてください。
Boostに関しては、多くのプラットフォームで、Boost.Asioはselect(kernel 2.4)、epoll(kernel 2.6)、kqueue(Mac OS)などのReactorの観点からProactorデザインパターンを実装しています。
Windows NT、2000、およびXPでは、Boost.AsioはオーバーラップしたI / Oを利用して、Proactorデザインパターンの効率的な実装を提供します。
ブーストの詳細:
www.boost.org/doc/libs/1_52_0/doc/html/boost_asio/overview/core/async.html
www.boost.org/doc/libs/1_35_0/doc/html/boost_asio/design/implementation.html