epoll(いーぽる)
最終更新:2026/4/27
epollは、多数のファイルディスクリプタを効率的に監視することを目的としてLinuxカーネルで提供されるI/O多重化機構である。
別名・同義語 イベント通知機構I/O多重化
ポイント
selectやpollと比較して、監視対象のファイルディスクリプタ数が多い場合に高いスケーラビリティを発揮する。イベント駆動型のネットワークプログラミングで利用される。
epollとは
epollは、Linuxカーネルで提供されるI/O多重化機構の一つです。従来のselectやpollといったシステムコールと比較して、より効率的に多数のファイルディスクリプタを監視することができます。これは、ネットワークサーバーや高負荷なI/O処理を行うアプリケーションにおいて、パフォーマンスを向上させるために重要な役割を果たします。
epollの仕組み
epollは、以下の3つの主要な要素で構成されます。
- epollインスタンスの作成:
epoll_create1()システムコールを使用して、epollインスタンスを作成します。このインスタンスは、監視対象のファイルディスクリプタとそれに関連するイベント情報を管理します。 - イベントの登録:
epoll_ctl()システムコールを使用して、監視対象のファイルディスクリプタと、監視したいイベント(読み込み可能、書き込み可能、エラーなど)を登録します。 - イベントの待機:
epoll_wait()システムコールを使用して、登録されたファイルディスクリプタで発生したイベントを待ちます。イベントが発生すると、epoll_wait()はイベントが発生したファイルディスクリプタのリストを返します。
epollの利点
- 高いスケーラビリティ:
selectやpollは、監視対象のファイルディスクリプタ数が増加すると、パフォーマンスが著しく低下します。一方、epollは、イベント駆動型のアプローチを採用しているため、監視対象のファイルディスクリプタ数が増加しても、パフォーマンスの低下を抑えることができます。 - 効率的なイベント通知: epollは、イベントが発生したファイルディスクリプタのみを通知するため、不要なポーリングを避けることができます。
- エッジトリガーとレベルトリガー: epollは、エッジトリガーとレベルトリガーの2つのトリガーモードをサポートしています。エッジトリガーは、イベントが発生した瞬間のみを通知し、レベルトリガーは、イベントが継続している間、繰り返し通知します。
epollの利用例
epollは、以下のようなアプリケーションで利用されています。