Очень интересует такая тема.
Имеем TCP сервер под Win32 который скажем обслуживает 1000 входящих TCP соединений. Передача данных в каждом из socket происходит с переодичностью примерно раз в 15 секунд.
Текущая реализация на каждое входящее подключение создает thread в котором и будет производиться блокирующее чтение\запись в соответсвующий socket. Поэтому имеем картину 1 listening thread, и по 1 thread'у на каждое TCP подключение.
С целью увеличения эффективности/производительности сервера возникла идея чтобы в одном потоке обслуживать несколько socket'ов. Планируемый прирост производительности ожидается за счет уменьшения накладных расходов на обслуживание thread'ов операционной системой.
Подобное функционирование (thread'ов меньше чем активных TCP соединений) наблюдается у Microsoft SQL Server'a. Наблюдал ситуацию когда к нему по протоколу TCP было более 300 соединений но в это же время счетчик потоков в в диспетчере задач Windows не превышал и 100.
Имеет ли смысл реализовывать описанный функционал?
Если кто-то встречался с обсуждением подобной темы в статьях, книгах будьте добры угостить ссылочкой.
Примерная схема реализации описанного функционала:
1 listening thread принимает подключение и передает его в pool обслуживающих потоков.
Каждый обслуживающий поток может иметь несолько TCP socket-ов. Возможность параллельной обработки нескольких socket-ов в одном потоке в один период времени планируется реализовать на .NET.
Насколько будет эффективен данный подход? Или есть какие то более эффективный алгоритмы реализации описанного функционала?