Benannte Pipeinstanzen
Der einfachste Pipeserver erstellt eine einzelne Instanz einer Pipe, stellt eine Verbindung mit einem einzelnen Client her, kommuniziert mit dem Client, trennt vom Client, schließt den Pipehandle und beendet. Es ist jedoch häufiger, dass ein Pipeserver mit mehreren Pipeclients kommunizieren kann. Ein Pipeserver könnte eine einzelne Pipeinstanz verwenden, um eine Verbindung mit mehreren Pipeclients herzustellen, indem eine Verbindung mit jedem Client hergestellt und getrennt wird, die Leistung wäre jedoch schlecht. Der Pipeserver muss mehrere Pipeinstanzen erstellen, um mehrere Clients gleichzeitig zu verarbeiten.
Es gibt drei grundlegende Strategien für die Wartung mehrerer Pipeinstanzen.
- Erstellen Sie einen separaten Thread für jede Instanz der Pipe. Ein Beispiel für einen Multithread-Pipeserver finden Sie unter Multithreaded Pipe Server.
- Verwenden Sie überlappende Vorgänge, indem Sie eine OVERLAPPED- Struktur in den Funktionen ReadFile-, WriteFile-und ConnectNamedPipe- angeben. Ein Beispiel finden Sie unter Named Pipe Server Using Overlapped I/O.
- Verwenden Sie überlappende Vorgänge, indem Sie die funktionen ReadFileEx und WriteFileEx verwenden, die eine Abschlussroutine angeben, die beim Abschluss des Vorgangs ausgeführt werden soll. Ein Beispiel finden Sie unter Named Pipe Server Using Completion Routines.
Der Multithread-Pipeserver ist am einfachsten zu schreiben, da der Thread für jede Instanz die Kommunikation für einen einzelnen Pipeclient verarbeitet. Das System weist jedem Thread nach Bedarf Prozessorzeit zu. Jeder Thread verwendet jedoch Systemressourcen, was für einen Pipeserver, der eine große Anzahl von Clients verarbeitet, einen Nachteil darstellt.
Mit einem Singlethread-Server ist es einfacher, Vorgänge zu koordinieren, die sich auf mehrere Clients auswirken, und es ist einfacher, freigegebene Ressourcen vor gleichzeitigem Zugriff durch mehrere Clients zu schützen. Die Herausforderung eines singlethreaded-Servers besteht darin, dass es eine Koordination von überlappenden Vorgängen erfordert, um Prozessorzeit für die Behandlung der gleichzeitigen Anforderungen von Clients zuzuweisen.