Delen via


Waarschuwingsbare I/O

Waarschuwingsbare I/O is de methode waarmee toepassingsthreads asynchrone I/O-aanvragen verwerken wanneer ze zich in een waarschuwingsstatus bevinden.

Als u wilt weten wanneer een thread een waarschuwingsstatus heeft, kunt u het volgende scenario overwegen:

  1. Een thread initieert een asynchrone leesaanvraag door ReadFileEx- aan te roepen met een aanwijzer naar een callback-functie.
  2. De thread initieert een asynchrone schrijfaanvraag door WriteFileEx- aan te roepen met een aanwijzer naar een callback-functie.
  3. De thread roept een functie aan waarmee een rij gegevens van een externe databaseserver wordt opgehaald.

In dit scenario worden de aanroepen naar ReadFileEx- en WriteFileEx- waarschijnlijk geretourneerd vóór de functie-aanroep in stap 3. Wanneer ze dit doen, plaatst de kernel de aanwijzers op de callback-functies in de Asynchrone procedureaanroepwachtrij (APC) van de thread. De kernel onderhoudt deze wachtrij specifiek om geretourneerde I/O-aanvraaggegevens te bewaren totdat deze kan worden verwerkt door de bijbehorende thread.

Wanneer het ophalen van rijen is voltooid en de thread wordt geretourneerd vanuit de functie, heeft de hoogste prioriteit het verwerken van de geretourneerde I/O-aanvragen in de wachtrij door de callback-functies aan te roepen. Hiervoor moet een waarschuwingsstatus worden ingevoerd. Een thread kan dit alleen doen door een van de volgende functies aan te roepen met de juiste vlaggen:

Wanneer de thread een waarschuwingsstatus invoert, vinden de volgende gebeurtenissen plaats:

  1. De kernel controleert de APC-wachtrij van de thread. Als de wachtrij callback-functieaanwijzers bevat, verwijdert de kernel de aanwijzer uit de wachtrij en verzendt deze naar de thread.
  2. De thread voert de callback-functie uit.
  3. Stap 1 en 2 worden herhaald voor elke aanwijzer die in de wachtrij blijft staan.
  4. Wanneer de wachtrij leeg is, retourneert de thread van de functie die deze in een waarschuwingsstatus heeft geplaatst.

In dit scenario wordt, zodra de thread een waarschuwingsstatus heeft ingevoerd, de callback-functies aangeroepen die naar ReadFileEx- en WriteFileEx-worden verzonden, en vervolgens worden geretourneerd vanuit de functie die deze in een waarschuwingsstatus heeft geplaatst.

Als een thread een waarschuwingsstatus krijgt terwijl de APC-wachtrij leeg is, wordt de uitvoering van de thread door de kernel onderbroken totdat een van de volgende handelingen plaatsvindt:

  • Het kernelobject waarop wordt gewacht, wordt gesignaleerd.
  • Een callback-functieaanwijzer wordt in de APC-wachtrij geplaatst.

Een thread die gebruikmaakt van waarschuwingsbare I/O-processen asynchrone I/O-aanvragen efficiënter dan wanneer ze gewoon wachten op de gebeurtenisvlag in de OVERLAPPENDE structuur die moet worden ingesteld, en het waarschuwingsbare I/O-mechanisme is minder ingewikkeld dan I/O-voltooiingspoorten te gebruiken. Waarschuwings-I/O retourneert echter alleen het resultaat van de I/O-aanvraag naar de thread die deze heeft gestart. I/O-voltooiingspoorten hebben deze beperking niet.

asynchrone procedureaanroepen