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