Epoll 7 C -funksjon

Epoll 7 C -funksjon
C -språket er et veldig stort språk når det gjelder bruk av forskjellige teknologier eller API -er. Det er også veldig brukbart når vi vil bruke socket -programmeringen. Akkurat som dette kommer det med Epoll 7 -funksjonene. Avstemning (2) og Epoll API observerer begge de forskjellige dokumentbeskrivelsene for å avgjøre om I/O er gjennomførbar på hver og en av dem. Epoll API strekker seg veldig bra med det store antallet overvåkede dokumentbeskrivelser og kan brukes som enten en nivå-fremmet eller kantpromptet gateway.

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.

  • Renteliste: Interessegruppen, også kjent som Epoll Collection, er samlingen av dokumentbeskrivelser som prosedyren har indikert at den er interessert i å holde oversikt over. Innsamlingen av dokumentbeskrivelser som ser ut til å være "klar" for I/O er kjent som all-set-køen.
  • Klar liste: Innsamlingen av dokumentidentifikatorer som er "utarbeidet" for I/O er kjent som “Ready List.”Dokumentidentifikatorene i rentelisten er en undergruppe av (eller, mer korrekt, en samling av pekere til) den klare listen. Kjernen bruker I/O -operasjoner på slike dokumentbeskrivelser for med jevne mellomrom for å fylle den klare listen.

Følgende systemfunksjoner er tilgjengelige for å bygge og administrere et Epoll -objekt:

  • EPOLL_CREATE (2): Epoll Create (2) -funksjonen starter en ny forekomst av Epoll -tjenesten og returnerer en filbeskrivelse. (Jo mer moderne Epoll Create1 (2) utvider på Epoll Create (2) (evne).)
  • EPOLL_CTL (2): Bidrar ting til Epoll -objektets interesseliste og brukes deretter til å registrere interessen i spesifikke dokumentbeskrivelser.
  • EPOLL_WAIT (2): Hvis det ikke er noen I/O -aktiviteter til stede for øyeblikket, blokkerer Epoll Wait (2) tråden som kalte den. (Denne systemanropet kan sees på som å samle ting fra Epoll -objektets klare liste.)

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:

  1. Lesesiden av et rørets dokumentbeskrivelse (RFD) er registrert på Epoll -objektet.
  2. Totalt 2 KB -innhold som blir skrevet på containerens skrivevegg av en rørforfatter.
  3. En forespørsel til Epoll Wait (2) blir laget, og RFD, et forberedt filhåndtak, returneres.
  4. Fra RFD vil rørledningsleseren lese 1 kilobyte innhold.
  5. En EPOLL_WAIT (2) Funksjonsanrop blir foretatt.

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:

  • Ikke-blokkerende dokumentbeskrivelser, og
  • Rett etter lest (2) eller skriv (2), lever Eagain ved å vente på en handling.

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.