「epollの仕組み」とは、カーネルの観点( 、epoll の実装方法)。
短いバージョンは非常に単純です: に似ていますがpoll
、次の 2 つの点が異なります。
- 不透明なデータ構造へのハンドルを使用するため、カーネル境界を越えて大量のデータをやり取りすることはありません。
- 特定の状況でより効率的なコードを記述できるオプション
poll
(特にエッジ トリガーとワンショット通知) がありません。
(また、Linux でのみ動作するという事実もあります。BSD および関連システムにはkqueue
、同じ利点を得る方法が大きく異なります。Solaris には/dev/poll
などがあり、一部の *nix には同等のものはありません。移植可能なコードを使用するには、 を使用poll
するか、 のような高レベルのライブラリを使用するかlibevent
、同等のものをlibevent
自分で作成する必要があります。)
と をすでに理解select
している場合poll
は、ウィキペディアの記事と参考文献にリンクされているブログの投稿で、知る必要があるほとんどすべての情報が得られ、man ページでギャップが埋められます。
そうでない場合は、まずについて学んでください。そうしてpoll
初めて、どのように異なるかを学ぶ意味epoll
があります。
これがあなたの主な質問にどのように関係しているかはまだわかりません。データベースファイル、メッセージングepoll
システムの基礎、またはLinuxでファイル記述子として表すことができるその他のほぼすべてのことができるので、理解がデータベースのポーリングの違いを説明するのにどのように役立つかわかりません対メッセージ キューのポーリング。もちろん、両者には大きな違いがありますが、イベントをトリガーするメカニズムは違います。inotify
pipe
socket
epoll