0

select() は、最大数のファイル記述子 (FD) のサイズの配列を超える必要があるため、スケーラブルではないと言われています: 複雑さ O(max_num_FD)。また、アクティブな FD() のサイズの配列のみを処理するため、poll() の方が優れていると言われています。複雑さ O(アクティブな FD の数) アクティブな FD とはどういう意味ですか?

poll() は、一度に多数のデータを利用できる大規模サーバーで使用される一般的な方法ですか? 通常、大規模サーバーが実際に使用するソケットアプローチはどれですか?

4

1 に答える 1

1

アクティブな FD は、開いているファイル記述子を意味します。

select() と poll() はどちらも、シングルスレッドのシングルプロセス プログラムが複数の接続を同時に処理できるようにするためのものです。たとえば、OpenWRT の uhttpd Web サーバーはそのようなものです。

select() と poll() はすべての Unice で利用できます。より優れたスケーリングの O(1) バージョンはepoll、Linux およびkqueueBSD 上にあります。ただし、移植性は低くなります。libkqueue0ただし、Debian Linux にはインストールできます。

多くのプログラムは他のアプローチを使用します。たとえば、SSH デーモンである sshd は、接続ごとに子プロセスを生成します。その他は、スレッド内の各接続を処理します。

于 2013-10-09T21:23:14.427 に答える