1 thread обслуживает несколько TCP соединений
От: hallucinogenlsd  
Дата: 12.07.06 09:04
Оценка:
Доброго времени суток!

Очень интересует такая тема.
Имеем 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.

Насколько будет эффективен данный подход? Или есть какие то более эффективный алгоритмы реализации описанного функционала?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.