Epoll-enheten, en informasjonsmodell i kjernen som kan sees fra brukerområdet som en innpakning for to sett, fungerer som den grunnleggende ideen til Epoll API. Innenfor denne guiden vil vi diskutere bruken av epollfunksjonen på C -språket.
Følgende systemfunksjoner er tilgjengelige for å bygge og administrere et Epoll -objekt:
Nivåutløste og kantutløste
Edge-utløste (ET) og nivåutløste (LT) atferd er begge mulig for Epoll Incident Circulation-grensesnittet (LT). De to metodens forskjeller kan oppsummeres som følger. Anta at følgende viser seg:
Forespørselen til EPOLL_WAIT (2) laget i trinn 5 vil sannsynligvis stoppe hvis RFD-dokumenthåndtaket er blitt tildelt Epoll-protokollen med Epollet (Edge-utløste) signalet. I mellomtiden kan den eksterne partneren forutse en reaksjon avhengig av innholdet den allerede leverte. Dette er fordi det kantutløste alternativet bare sender signaler når den observerte dokumentbeskrivelsen gjennomgår modifikasjoner.
Derfor kan den som ringer funksjonen til og med må settes på vent for en viss informasjon som allerede er i bufferbufferen i fase 5. I det nevnte eksemplet utløser skrivingen i 2. mai en aktivitet som skal opprettes på RFD, og hendelsen vil bli mottatt i 3. Oppfordringen til Epoll_wait (2) i trinn 5 kan bli sittende fast fordi leseaktiviteten i trinn 4 ikke brukte all bufferinformasjon.
For å forhindre at en stoppende lesing eller skriver å tømme en jobb som administrerer de forskjellige filbeskrivelsene, bør et program som bruker Epollet-alternativet bruke de ikke-blokkerende dokumentbeskrivelsene. Følgende er en anbefalt prosedyre for bruk av Epoll som et kantutløst (Epollet) grensesnitt:
Epoll er derimot bare en raskere versjon av avstemningen (2) og kan brukes overalt avstemning (2) brukes siden den har den identiske logikken når den blir sett på som en nivåutløst protokoll (standarden når Epollet er ikke gitt). Innringeren -funksjonen har valget om å levere epolloneshot -signalet for å instruere epollen om å stenge den koblede filbeskrivelsen når du mottar en forekomst med EPOLL_WAIT. I mellomtiden, selv med kantutløstet epoll, kan mange handlinger opprettes ved mottak av flere sett med informasjon (2). Den som ringer må virkelig omdisponere dokumentbeskrivelsen med EPOLL_CTL (2) og EPOLL_CTL_MOD når Epolloneshot -flagget er gitt.
Eksempel:
Selv om logikken til Epoll når den brukes som en terskel API er identisk med avstemningene (2), krever den kantutløse atferdsbruk for større forklaring for å forhindre forsinkelser i programbegivenhetskøen. Lytteren i denne illustrasjonen er en ikke-blokkerende stikkontakt som lytting (2) -funksjonen påkalles. Før Eagain gis enten ved å lese (2) eller skrive () -funksjonen, bruker metoden FD () -funksjonen for å opprettholde den nye klare filbeskrivelsen (2). En hendelsesdrevet State Machine-app kan like godt redde sin nåværende tilstand etter å ha mottatt Eagain slik at den kunne gjenoppta lesing eller skrive på forrige punkt når FD () blir kalt igjen. Sjekk ut den pålagte koden her:
For å forbedre effektiviteten kan filbeskrivelsen bare legges til en gang innenfor Epoll-grensesnittet (Epoll CTL Add) ved å betegne (Epollin | Epollout) som et kantutløst grensesnitt. Ved å kjøre Epoll CTL (2) med Epoll CTL Mod, kan du unngå konstant skifting mellom Epollin og Epollout. Den gjenværende koden for denne illustrasjonen er vedlagt i følgende bilde:
Konklusjon:
Dette handler om bruken av Epoll 7 C -funksjonen i Ubuntu 20.04 Linux -operativsystem for å utføre socket -programmering. Vi diskuterte hvordan en Epoll () 7 C -funksjon kan brukes til å sjekke muligheten for de forskjellige filbeskrivelsene for å bestemme om inngangen og utgangen de inneholder er levedyktige eller ikke, både fra server- og klientsiden.