Select と epoll は両方ともマルチチャネル I/O メカニズムのソリューションです。Select は POSIX 標準にありますが、epoll は Linux に固有のものです。
epoll の最大の利点は、データ構造が配列データ構造に似ているのに対して、FD の数が増加しても効率が低下しないことです。epoll はキューを直接確認できます。空です。
nginx は epoll を使用して I/O 多重化を実現し、高い同時実行性をサポートします。現在、nginx は高い同時実行性のシナリオでますます普及しています。
select の欠点の 1 つは、単一プロセスが監視できるファイル記述子の数に最大制限があることです
エポール:
(1) 監視対象の fd 数が増えても IO 効率が低下しません。 Epoll は select や Paul のポーリング方式とは異なり、各 fd で定義されたコールバック関数によって実装されます。準備ができた fd のみがコールバック関数を実行します
(2) サポート レベル トリガーとエッジ トリガー (どのファイル記述子が準備できたかをプロセスに通知するだけです。一度だけ通知されます。アクションを実行しない場合、再度通知されません。この方法はエッジ トリガーと呼ばれます) 2理論的にはエッジ トリガーのパフォーマンスが高くなりますが、コードの実装は非常に複雑です。
(3) 優れた Readiness イベント通知メカニズムを備えています
選択:
(1) 1 つのプロセスが監視できる FDS の数は制限されており、32 ビット マシンでは、管理できる FDS の最大数は 1024 です。
(2) ソケットはリニアにスキャンされ、ソケット ファイル記述子の数が増加すると、多くの時間が無駄になります。