Epoll

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 30 november 2013; kontroller kräver 13 redigeringar .

Epoll (event poll) är ett multiplexerat I/O API som tillhandahålls av Linux för applikationer. API:et tillåter applikationer att övervaka flera öppna filbeskrivningar (som kan vara filer, enheter eller uttag, inklusive nätverksuttag) för att se om enheten är redo att fortsätta inmatning (utdata). Epoll var tänkt att vara en mer effektiv ersättning för de select()och anrop som poll()definieras av POSIX . Epoll kan tillhandahålla en mer effektiv mekanism för applikationer som hanterar ett stort antal samtidigt öppna anslutningar, med O(1)-komplexitet i motsats till standard O(n)-mekanism. Epoll liknar FreeBSDs Kqueue- system och är också ett kärnobjekt som tillhandahålls för att köras i användarutrymmet i form av en filbeskrivning .

I analogi kallas "epoll" ofta för andra liknande lösningar som liknar metodiken.

välj/fråga problem

För att använda select eller poll måste ett program skicka till kärnan en komplett lista över alla filbeskrivningar som det förväntar sig att data ska visas på; och kärnan måste i sin tur kontrollera statusen för deskriptorerna för vart och ett av de godkända elementen och bilda en struktur som beskriver tillståndet för varje godkänd deskriptor. Detta tillvägagångssätt kommer inte att skapa många problem i form av tiotals eller hundratals deskriptorer. Prestandan i stora nätverk sjunker dock märkbart.

Beskrivning av epoll API

Linux tillhandahåller följande API-anrop:

Funktionsprototyper

int epoll_create(int size);
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);

Hur det fungerar: efter att applikationen har lagt till beskrivningar till klockan och anropat epoll_wait(), när någon deskriptor är klar (uppkomsten av information, buffertömning, etc.), returnerar kärnan applikationen från epoll_wait med en lista över filbeskrivningar som är redo att arbeta. Om några deskriptorer blir klara för användning innan epoll_wait anropas, markeras de därefter, och nästa gång epoll_wait anropas, återgår kontrollen till applikationen omedelbart med en lista över filbeskrivningar som är redo för arbete.

Händelser som kan övervakas med epoll:

Funktionssätt

epoll låter dig arbeta i två lägen:

Om applikationen bara läser en del av den läsbara informationen från filbeskrivningen, så vid nästa anrop:

Management

Sedan 2.6.28 anger /proc/sys/fs/epoll/max_user_watches det maximala antalet filbeskrivningar som en användare kan titta på.

Källor