E/S alertables

La E/S alertable es el método por el que los subprocesos de aplicación procesan solicitudes de E/S asincrónicas solo cuando están en un estado de alerta.

Para comprender cuándo un subproceso está en un estado de alerta, tenga en cuenta el siguiente escenario:

  1. Un subproceso inicia una solicitud de lectura asincrónica llamando a ReadFileEx con un puntero a una función de devolución de llamada.
  2. El subproceso inicia una solicitud de escritura asincrónica llamando a WriteFileEx con un puntero a una función de devolución de llamada.
  3. El subproceso llama a una función que captura una fila de datos de un servidor de bases de datos remoto.

En este escenario, las llamadas a ReadFileEx y WriteFileEx probablemente se devolverán antes de la llamada de función en el paso 3. Cuando lo hacen, el kernel coloca los punteros a las funciones de devolución de llamada en la cola de llamada asincrónica (APC) del subproceso. El kernel mantiene esta cola específicamente para contener los datos de solicitud de E/S devueltos hasta que el subproceso correspondiente pueda procesarlo.

Cuando se completa la captura de fila y el subproceso vuelve de la función, su prioridad más alta es procesar las solicitudes de E/S devueltas en la cola llamando a las funciones de devolución de llamada. Para ello, debe especificar un estado de alerta. Un subproceso solo puede hacerlo llamando a una de las siguientes funciones con las marcas adecuadas:

Cuando el subproceso entra en un estado de alerta, se producen los siguientes eventos:

  1. El kernel comprueba la cola de APC del subproceso. Si la cola contiene punteros de función de devolución de llamada, el kernel quita el puntero de la cola y lo envía al subproceso.
  2. El subproceso ejecuta la función de devolución de llamada.
  3. Los pasos 1 y 2 se repiten para cada puntero restante en la cola.
  4. Cuando la cola está vacía, el subproceso vuelve de la función que lo colocó en un estado de alerta.

En este escenario, una vez que el subproceso entra en un estado de alerta, llamará a las funciones de devolución de llamada enviadas a ReadFileEx y WriteFileEx y, a continuación, devolverá de la función que la colocó en un estado de alerta.

Si un subproceso entra en un estado de alerta mientras su cola de APC está vacía, el kernel suspenderá la ejecución del subproceso hasta que se produzca una de las siguientes acciones:

  • El objeto kernel en el que se espera se señala.
  • Un puntero de función de devolución de llamada se coloca en la cola de APC.

Un subproceso que usa E/S alertas procesa solicitudes de E/S asincrónicas de forma más eficaz que cuando simplemente esperan en la marca de evento en la estructura SUPERPUESTA que se va a establecer y el mecanismo de E/S de alerta es menos complicado que los puertos de finalización de E/S que se van a usar. Sin embargo, la E/S alertable devuelve el resultado de la solicitud de E/S solo al subproceso que lo inició. Los puertos de finalización de E/S no tienen esta limitación.

Llamadas a procedimientos asincrónicos