Istanze di pipe denominate
Il server pipe più semplice crea una singola istanza di una pipe, si connette a un singolo client, comunica con il client, disconnette dal client, chiude l'handle della pipe e termina. Tuttavia, è più comune che un server di pipe comunichi con più client pipe. Un server pipe può usare un'unica istanza della pipe per connettersi a più client pipe connettendosi a e disconnettendosi da ogni client in sequenza, ma le prestazioni sarebbero scarse. Il server pipe deve creare più istanze della pipe per gestire in modo efficiente più client contemporaneamente.
Esistono tre strategie di base per la manutenzione di più istanze della pipe.
- Creare un thread separato per ogni istanza della pipe. Per un esempio di server pipe multithreaded, vedere Server pipe multithreaded.
- Usare operazioni sovrapposte specificando una struttura OVERLAPPED nelle funzioni ReadFile, WriteFile e ConnectNamedPipe. Per un esempio, vedere Server pipe denominato con sovrapposizione di I/O.
- Usare operazioni sovrapposte usando le funzioni ReadFileEx e WriteFileEx , che specificano una routine di completamento da eseguire al termine dell'operazione. Per un esempio, vedere Named Pipe Server Using Completion Routines( Routine di completamento).
Il server pipe multithreading è più semplice da scrivere, perché il thread per ogni istanza gestisce le comunicazioni per un singolo client pipe. Il sistema alloca il tempo del processore a ogni thread in base alle esigenze. Ogni thread usa tuttavia risorse di sistema, che è uno svantaggio per un server di pipe che gestisce un numero elevato di client.
Con un server a thread singolo, è più semplice coordinare le operazioni che influiscono su più client ed è più facile proteggere le risorse condivise dall'accesso simultaneo da più client. La sfida di un server a thread singolo è che richiede il coordinamento delle operazioni sovrapposte per allocare il tempo del processore per gestire le esigenze simultanee dei client.