Partilhar via


E/S alertável

E/S alertável é o método pelo qual threads de aplicativos processam solicitações de E/S assíncronas somente quando estão em um estado alertável.

Para entender quando um thread está em um estado alertável, considere o seguinte cenário:

  1. Um thread inicia uma solicitação de leitura assíncrona chamando ReadFileEx com um ponteiro para uma função de retorno de chamada.
  2. O thread inicia uma solicitação de gravação assíncrona chamando WriteFileEx com um ponteiro para uma função de retorno de chamada.
  3. O thread chama uma função que busca uma linha de dados de um servidor de banco de dados remoto.

Nesse cenário, as chamadas para ReadFileEx e WriteFileEx provavelmente retornarão antes da chamada de função na etapa 3. Quando isso acontece, o kernel coloca os ponteiros para as funções de retorno de chamada na fila APC (Asynchronous Procedure Call) do thread. O kernel mantém essa fila especificamente para manter os dados de solicitação de E/S retornados até que possam ser processados pelo thread correspondente.

Quando a busca de linha estiver concluída e o thread retornar da função, sua prioridade mais alta é processar as solicitações de E/S retornadas na fila chamando as funções de retorno de chamada. Para fazer isso, ele deve entrar em um estado alerta. Um thread só pode fazer isso chamando uma das seguintes funções com os sinalizadores apropriados:

Quando o thread entra em um estado alertável, ocorrem os seguintes eventos:

  1. O kernel verifica a fila APC do thread. Se a fila contiver ponteiros de função de retorno de chamada, o kernel removerá o ponteiro da fila e o enviará para o thread.
  2. O thread executa a função de retorno de chamada.
  3. As etapas 1 e 2 são repetidas para cada ponteiro restante na fila.
  4. Quando a fila está vazia, o thread retorna da função que o colocou em um estado alertável.

Nesse cenário, uma vez que o thread entra em um estado alertável, ele chamará as funções de retorno de chamada enviadas para ReadFileEx e WriteFileExe, em seguida, retornará da função que o colocou em um estado alertável.

Se um thread entrar em um estado alertável enquanto sua fila APC estiver vazia, a execução do thread será suspensa pelo kernel até que ocorra uma das seguintes situações:

  • O objeto do kernel que está sendo aguardado torna-se sinalizado.
  • Um ponteiro de função de retorno de chamada é colocado na fila APC.

Um thread que usa E/S alertável processa solicitações de E/S assíncronas de forma mais eficiente do que quando elas simplesmente aguardam o sinalizador de evento na estrutura deOVERLAPPED a ser definida, e o mecanismo de E/S alertável é menos complicado do que portas de conclusão de E/S usar. No entanto, a E/S alertável retorna o resultado da solicitação de E/S somente para o thread que a iniciou. As portas de conclusão de E/S não têm essa limitação.

Chamadas de procedimento assíncrono