命名管道实例
最简单的管道服务器创建管道的单个实例,连接到单个客户端,与客户端通信,断开与客户端的连接,关闭管道句柄,然后终止。 但是,管道服务器与多个管道客户端通信更为常见。 管道服务器可以使用单个管道实例通过按顺序连接到每个客户端并断开与多个管道客户端的连接,但性能会很差。 管道服务器必须创建多个管道实例,才能有效同时处理多个客户端。
为多个管道实例提供服务有三种基本策略。
- 为每个管道实例创建单独的线程。 有关多线程管道服务器的示例,请参阅 多线程管道服务器。
- 通过在 ReadFile、WriteFile 和 ConnectNamedPipe 函数中指定 OVERLAPPED 结构,使用重叠操作。 有关示例,请参阅 使用重叠 I/O 的命名管道服务器。
- 通过使用 ReadFileEx 和 WriteFileEx 函数来使用重叠操作,这些函数指定要在操作完成时执行的完成例程。 有关示例,请参阅 使用完成例程的命名管道服务器。
多线程管道服务器最容易写入,因为每个实例的线程处理单个管道客户端的通信。 系统根据需要为每个线程分配处理器时间。 但每个线程都使用系统资源,这是处理大量客户端的管道服务器的缺点。
使用单线程服务器可以更轻松地协调影响多个客户端的操作,并且更容易保护共享资源免受多个客户端同时访问。 单线程服务器的挑战在于,它需要协调重叠的操作,以分配处理器时间来处理客户端的并发需求。