問題タブ [epollet]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
387 参照

linux - ネストされた EPOLL FD

ネストされた FD の動作に関するオンラインの情報は非常に限られています。

EPOLL FD1 が EPOLL FD2 と FD3 の間で共有されているとします。では、epoll FD1 がイベントを取得するとどうなるでしょうか

  1. epoll_exclusive フラグなしで追加すると、FD2 と Fd3 の両方にイベントが発生しますか。
  2. イベントを取得した後、FD1 で epoll_wait を実行してイベントをクリアする必要がありますか?

そして、ネストされた epoll FD の使用例は何ですか。

0 投票する
1 に答える
683 参照

nonblocking - 「特別な」epoll フラグは kqueue フラグにどのように対応しますか?

EPOLLONESHOT EPOLLET EPOLLEXCLUSIVEepoll フラグと kqueue フラグ、特にEV_CLEAR/EV_DISPATCH/EV_ONESHOTの間の類似点を描くのに苦労しています。初めてkqueueを調査しています。私はepollでしか経験がありませんでした。

EV_DISPATCH

EPOLLEXCLUSIVE フラグと EPOLLONESHOT フラグを組み合わせたような感じです。kqueue のドキュメントから:

このイベントをポーリングした kqueue インスタンスが少なくとも 1 つある場合、イベントが通知され、すぐに破棄されるというドキュメントを正しく理解していますか? つまり、2 つの kqueue で EVFILT_READ のソケットをポーリングすると、それを受け取るのは 1 つだけです。その後、同じイベントが EVFILT_ENABLE で設定されるまで、新しいデータがソケットに届いたとしても、それ以上のイベントはまったく発生しません。 ?

EV_CLEAR

EPOLLETに近いようです。kqueue のドキュメントから:

したがって、たとえば、EVFILT_READ を持つ同じソケットが与えられた場合、それを同時にポーリングするすべての kqueues は、EVFILT_READ で起動します。ただし、すべてのデータが読み取られない場合 (つまり、EAGAIN まで)、それ以上のイベントは報告されません。すべてのデータが読み取られ、新しいデータが到着した場合にのみ、新しい EVFILT_READ イベントがトリガーされます。それが正しいか?

EV_ONESHOT

EPOLLONESHOT にマップされているようです。kqueue のドキュメントから:

質問

だから、質問:

  1. 私の理解は正しいですか?epoll と比較して、これらの特別なフラグを正しく理解できましたか? ドキュメンテーションは私には少し難しいようです。おそらく問題は、私が以前に epoll しか使用したことがなく、まだ kqueue を使用したことがないことです。
  2. kqueue テクニックを確認するための良い情報源または例を提供していただけますか? Boost.Asio のように複雑にならないようにすればいいのにと思います。また、これらのソースが C で書かれているとよいでしょう。
  3. これらのフラグを組み合わせることはできますか? たとえば、EPOLLONESHOT は EPOLLEXCLUSIVE と組み合わせることはできませんが、EV_DISPATCH はこれらのフラグのちょうど中間にあるようです。

ご協力ありがとうございました!

参考文献

kqueue(2): FreeBSD システムコールマニュアル

epoll(7): Linux プログラマーズ マニュアル

epoll_ctl(7): Linux プログラマーズ マニュアル