Sobes.tech
Junior — Middle

Explique o conceito de Portas de Conclusão e sua finalidade no processamento assíncrono de entrada/saída

sobes.tech IA

Resposta da IA

Portos de Conclusão (Completion Ports) são um mecanismo no Windows para processamento eficiente de entrada/saída (I/O) assíncrona. Permitem que a aplicação registre várias operações de entrada/saída e receba notificações sobre sua conclusão através de uma fila de mensagens.

Vantagens principais:

  • Permitem processar múltiplas operações assíncronas com um número mínimo de threads.
  • Melhoram o desempenho ao reduzir os custos de troca de contexto.

Princípio de funcionamento:

  1. Cria-se um Port de Conclusão.
  2. Os descritores de ficheiros ou sockets são associados a este port.
  3. São iniciadas operações de entrada/saída assíncronas.
  4. Ao terminar a operação, uma mensagem é colocada na fila do port.
  5. Os threads que aguardam no port recebem a notificação e processam o resultado.

Exemplo de uso em C++ (simplificado):

HANDLE completionPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0);
// Associar o descritor ao port
CreateIoCompletionPort(fileHandle, completionPort, (ULONG_PTR)fileHandle, 0);

// Iniciar uma operação assíncrona
ReadFile(fileHandle, buffer, size, NULL, &overlapped);

// Aguardar a conclusão
DWORD bytesTransferred;
ULONG_PTR key;
LPOVERLAPPED pOverlapped;
GetQueuedCompletionStatus(completionPort, &bytesTransferred, &key, &pOverlapped, INFINITE);
// Processar a operação concluída

Desta forma, os Portos de Conclusão permitem escalar eficientemente aplicações servidoras que lidam com múltiplas requisições de entrada/saída simultâneas.