Экземпляры именованных каналов
Самый простой сервер канала создает один экземпляр канала, подключается к одному клиенту, взаимодействует с клиентом, отключается от клиента, закрывает дескриптор канала и завершает работу. Однако сервер канала чаще всего взаимодействует с несколькими клиентами канала. Сервер канала может использовать один экземпляр канала для соединения с несколькими клиентами канала путем последовательного подключения к каждому клиенту и отключения от них, но производительность будет низкой. Сервер канала должен создать несколько экземпляров канала для эффективной обработки нескольких клиентов одновременно.
Существует три основные стратегии обслуживания нескольких экземпляров канала.
- Создайте отдельный поток для каждого экземпляра канала. Пример многопоточного сервера канала см. в разделе Сервер многопоточных каналов.
- Используйте перекрывающиеся операции, указав структуру OVERLAPPED в функциях ReadFile, WriteFile и ConnectNamedPipe . Пример см. в разделе Сервер именованного канала с использованием перекрывающихся операций ввода-вывода.
- Используйте перекрывающиеся операции с помощью функций ReadFileEx и WriteFileEx , которые указывают подпрограмму завершения, выполняемую после завершения операции. Пример см. в разделе Сервер именованных каналов с использованием процедур завершения.
Сервер многопоточного канала проще всего записать, так как поток для каждого экземпляра обрабатывает обмен данными для одного клиента канала. Система выделяет время процессора для каждого потока по мере необходимости. Но каждый поток использует системные ресурсы, что является недостатком сервера канала, который обрабатывает большое количество клиентов.
С помощью однопотокового сервера проще координировать операции, затрагивающие несколько клиентов, и проще защитить общие ресурсы от одновременного доступа нескольких клиентов. Проблема однопотокового сервера заключается в том, что ему требуется координация перекрывающихся операций для выделения процессорного времени для обработки одновременных потребностей клиентов.