、投票を選択し、ファイルディスクリプタは、IO多重化です。
I / O機構を介して多重化、ディスクリプタを複数のディスクリプタを監視することができ、一度レディ(準備一般読み取りまたは書き込みレディ)、プログラム読み取りおよび書き込み操作に応じて通知することができます。しかし、彼らはイベント後の読み取りおよび書き込みする必要があるので、それは、I / Oを選択し、ポーリング、ファイルディスクリプタの本質同期していることは読み書きプロセスがブロックされていることを、自分自身の読み込みと書き込みのための責任準備ができて、非同期I / Oは、自身に必要ではありません読み書きを担当し、非同期I /ユーザーへのカーネル空間からコピーされたデータの実装のためのO責任を負います。
欠点は、選択します
選択する各呼び出しは、プロセスが起きている各キューからすべてのFDキューに、それぞれの時間を削除するを追加する必要がある。FDがカーネル状態にユーザーから渡されるたびに設定されている。プロセスが起こされている、プログラムを準備fdがわからない、まだ複数回トラバースする必要があります。
トラバース大きなオーバーヘッドがあるため、デフォルトでは1024 FDを監視します
投票
世論調査と同様の選択が、さまざまな方法で収集をFD、しかし、最大の制限を解決するためには、ファイルディスクリプタを選択するには
epoll(eventpoll)
機能分離、待ちキューと個別のプロセスをブロックします。
構造(eventpoll)を作成するcreate-、CTL-削除FD、WAIT-ウェイク
新レディキュー
カーネルが参照する準備ができて、FDの準備リストを維持し、あなたはトラバースを避けることができるようになります
epollの作品:そこに準備ができてFDかどうか常にポーリングを選択して、ポーリングのコールバック関数は、準備リストへの準備ができて、FDになる場合eventpoll、CTL fdで追加および削除は、準備ができてFD、プロセスは(にスリープ状態になり、待機中で目覚める作成)、リストが空であるかどうかを判断するために待つだけ、あなたは全体のFDを横断する必要はありません。
ときに選択し、各時間待機状態をポーリングし、プロセスは、FD内のすべてのモニターの待機中リストをマウントする必要があります。準備ができたらFD溶液を再びリンク
参考:
epoll原理https://blog.csdn.net/armlinuxww/article/details/92803381
選択し、ポーリング、ファイルディスクリプタの長所と短所https://blog.csdn.net/qq_35433716/article/details/82588619