2

私はソケットに不慣れで、いくつかのepoll資料とコードを学習/読んでいます。私の質問は、epollがシステム(Linux)で利用可能な場合、epollがselect / pollを完全に置き換えることができるということですか?

ソケットプログラミングにも、実際に従うべきいくつかのパラダイムが必要だと思います。私がコードを読んでいたとき、私は「epoll」でいくつかの「選択」を見つけました:

  1. サーバーコードは、ソケットのブロックを処理するときにselectを使用します。epoll(LT)はselectとまったく同じように動作すると思うので、epollを使用してすべてのselectを置き換えてもかまいません。

  2. 一部のレガシーコードは、epollを使用して監視します。イベントが戻った後、対応するfdでselectを使用して、読み取り/書き込みの直前に「チェック」します。この「選択」の意味がよくわかりません。

私はこれらの「選択」コードについて混乱していて、誰かが助けてくれることを願っています。

4

1 に答える 1

5

はい。

Select、Poll、epollはすべて同じニーズを対象としています。記述子が読み取りまたは書き込みの準備ができるまで待機し、記述子を処理(読み取りまたは書き込み)できるようにします。

epollは比較的新しい実装であり、Linux OSに固有です(したがって、移植性はありません)。すべての記述子を渡して、システムコールが返される原因を確認する必要なしに、保留中の記述子のみを返すという利点があります。多くの場合、epollはselectまたはpollよりも高速です。

古いコードをリファクタリングせずにパッチを適用したレガシーコードのように、選択したサウンドと混合したepollを使用します。epollはselectをよりクリーンで高速な方法で実装し(ほとんどの場合)、前述のように、2つのモード(エッジまたはレベル)のいずれかで動作します。

epoll記述子が別のepollにネストされて、ある種の階層を実装する複雑な例がいくつかありますが、それはまれであり、個人的にはそのコード実装を見たことがないと思います。

于 2012-04-12T09:51:49.387 に答える