3

WindowsとLinuxの両方に実装された、ブーストソケットに似たasio拡張機能を作成しようとしています。拡張機能は、Linux用のEIBDを使用してKNXネットワークと対話するために使用されます。問題は、複数のファイル記述子を監視する方法です。select()を使用する場合、FD_SETSIZE制限を回避する方法は?

Boostはソケット実装でこれをどのように処理しますか?私の知る限り、WindowsではIO完了ポートを使用しています。

4

1 に答える 1

3

私の質問に対する簡単な答えは、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

于 2013-01-29T07:42:13.327 に答える