Instâncias de pipe nomeadas
O servidor de pipe mais simples cria uma única instância de um pipe, conecta-se a um único cliente, comunica-se com o cliente, desconecta-se do cliente, fecha o identificador de pipe e termina. No entanto, é mais comum que um servidor de pipe se comunique com vários clientes de pipe. Um servidor de pipe poderia usar uma única instância de pipe para se conectar com vários clientes de pipe conectando-se e desconectando-se de cada cliente em sequência, mas o desempenho seria ruim. O servidor de pipe deve criar várias instâncias de pipe para lidar com eficiência com vários clientes simultaneamente.
Há três estratégias básicas para atender várias instâncias de pipe.
- Crie um thread separado para cada instância do pipe. Para obter um exemplo de um servidor de pipe multithread, consulte Servidor de Pipe Multithreaded.
- Use operações sobrepostas especificando uma estrutura OVERLAPPED nas funções ReadFile, WriteFile e ConnectNamedPipe . Para obter um exemplo, consulte Servidor de pipe nomeado usando E/S sobreposta.
- Use operações sobrepostas usando as funções ReadFileEx e WriteFileEx , que especificam uma rotina de conclusão a ser executada quando a operação for concluída. Para obter um exemplo, consulte Servidor de pipe nomeado usando rotinas de conclusão.
O servidor de pipe multithread é mais fácil de gravar, pois o thread para cada instância lida com comunicações para um único cliente de pipe. O sistema aloca o tempo do processador para cada thread conforme necessário. Mas cada thread usa recursos do sistema, o que é uma desvantagem para um servidor de pipe que manipula um grande número de clientes.
Com um servidor de thread único, é mais fácil coordenar operações que afetam vários clientes e é mais fácil proteger recursos compartilhados contra acesso simultâneo por vários clientes. O desafio de um servidor de thread único é que ele requer coordenação de operações sobrepostas para alocar o tempo do processador para lidar com as necessidades simultâneas dos clientes.