select /poll /epollは、同時に複数のディスクリプタを監視することができるIO多重化メカニズムで、ディスクリプタの準備が完了すると(読み取りまたは書き込み準備ができたとき)、対応するプログラムに直ちに読み取りまたは書き込みが通知されます。本質的にselect /poll /epollは同期I /Oです、すなわち読み書きはブロックされます。 1つ、select
プロトタイプ:
int select(int n、fd_set * readfds、fd_set * writefds、fd_set * exceptfds、struct timeval * timeout);
select関数から3つのクラスを監視するファイル記述子:writefds、readfds、exceptfds。記述子の準備が整う(データが読み取り可能、書き込み可能、または例外が発生する)かタイムアウトになるまでselect関数を呼び出すとブロックされ、関数は戻ります。 select関数が戻ったら、ディスクリプタセットをたどって準備ができたディスクリプタを見つけることができます。
selectのデメリット
プロトタイプ:
Int poll(構造体pollfd * fds、符号なしint nfds、intタイムアウト);
ここで、pollfdは、次のように監視対象記述子のセットを表します。
struct pollfd {int fd; //ファイル記述子短いイベント; //監視対象request short short revents; //発生したイベント};
pollfd構造体には、監視するイベントと発生するイベントが含まれ、pollfdに上限はありません(ただし、大きすぎるとパフォーマンスが低下します)。 select関数と同様に、poll関数が戻ったときには、ディスクリプタセットをトラバースすることでレディディスクリプタを見つけることができます。
上記から、戻った後にファイルディスクリプタをトラバースして準備完了ソケットを取得する必要があることを選択してポーリングします。実際、同時に接続された多数のクライアントは、一度に少数の作動可能状態を持つことがあるため、モニター対象記述子の数が増えると、それらの効率も直線的に低下します。
3、epoll
epollは2.6カーネルで提案された、select and pollの拡張版です。選択および投票と比較して、epollはより柔軟であり、記述子の制限はありません。 Epollはファイルディスクリプタを使用して複数のディスクリプタを管理し、ユーザー空間のファイルディスクリプタ内のイベントをカーネル内のイベントテーブルに格納するので、ユーザー空間とカーネル空間へのコピーは1回だけ必要です。 epollメカニズムは、Linuxの最も効率的なI /O多重化メカニズムで、複数のファイルハンドルに対するI /Oイベントを待ちます。
選択/ポーリングにはメソッドが1つだけあり、epollにはepoll_create()、epoll_ctl()、およびepoll_wait()の3つのメソッドがあります。
3.1 epoll_create()
int epoll_create(int size);
はepollハンドルを作成するために使用され、sizeはlistenする記述子の数を参照します。現在カーネルは動的拡張をサポートしています。十分なスペースがない場合、最初に割り当てられたfdの数は動的に拡張されます。 epollハンドルを作成した後、それはfd値を取ります。
ls /proc /< pid> /fd ///これは端末で実行できますepollを使用した後にfd
を見た後、close()を呼び出さなければなりません。オフにすると、そうでなければfdが使い果たされる可能性があります。
3.2 epoll_ctl()
int epoll_ctl(int epfd、int op、int fd、struct epoll_event * event);
は、fdのような、監視が必要なファイルディスクリプタ(fd)に対してop操作を実行するために使用されます。 epollハンドルに追加します。
epoll_event:監視されるイベント、struct epoll_eventは次のように構成されています。
struct epoll_event {__uint32_tイベント; /* Epollイベント* /epoll_data_tデータ; /*ユーザー使用可能データ* /};
イベントは、対応するファイル記述子の値を示すことができる:(操作)
ログイン
この関数は、タイムアウトしたことを示すために0を返すなど、処理が必要なイベントの数を返します。 select /pollでは、プロセスは特定のメソッドを呼び出した後にすべての監視対象ファイル記述子をスキャンし、epollはepoll_ctl()を介して事前にファイルを登録します。ディスクリプタ - ファイルディスクリプタの準備が整うと、カーネルはコールバックのようなコールバックメカニズムを使用してファイルディスクリプタをすばやく起動し、プロセスがepoll_wait()を呼び出したときに通知を受けます。 (ここではファイル記述子の走査は削除されていますが、コールバックのメカニズムを監視することによって行われています。これがepollの魅力です。)
epollの利点
監視ディスクリプタの数に制限はありませんサポートされているFDの制限は、オープンファイルの最大数ですcat /proc /sys /fs /file-maxで確認できます一般的に言って、この数はシステムメモリと大きな関係があります。携帯電話の場合、この値は200,000から300,000です。
IO効率がFDの低下を監視する数を増加することはありません。 Epollはpollおよびpoll pollの方法とは異なりますが、各fdで定義されているコールバック関数によって実装されており、ready fdだけがコールバック関数を実行します。あなたはアイドル接続またはデッド接続の多くをしない場合
、ファイルディスクリプタと効率性比率が非常に高い/投票を選択しませんが、アイドル状態の接続が多数に直面したとき、あなたは見つけるでしょうEpollはselect /pollよりもはるかに効率的です。
zh-CN"],null,[1],zh-TW"]]]
わずかに大きいサイトでは必然的に負荷分散されますが、ハードウェア負荷分散は高価です。ソフトウェアロードバランシングとしてLinuxの下に安価なnginxがあります。 I.実験的な環境設定とトポロ
のTelnetサービスの設定手順は以下の通りである: A、Telnetのインストールパッケージ(通常2つ)ログイン 1、telnet-クライアント(またはtelnet)は、そのパッケージのt
インストール手順 1、このインストールパッケージはAlibaba CloudのすべてのLinuxシステムにデプロイできます。このインストールパッケージのソフトウェアとバージョンは:nginx:1.0で
LinuxはLinuxよりWindowsのセキュリティが高いとLinuxは信じていると多くのメディアや専門家が考えています。しかし、セキュリティがより重要になる今日、このセキュリティはユーザーの正しい