Я пишу сервер, который должен обслуживать большое количество клиентов.Я рассматриваю, какую стратегию потоков лучше всего использовать: я прочитал, что класс ThreadPool
в .NET Framework распределяет потоки после учета таких параметров, как число ядер, на которых работает машина, и это здорово.Однако, если нет доступного потока, он ждет, пока он не станет доступным.
Соединения в моих сокетах могут быть довольно длинными, то есть поток может работать довольно долго, прежде чем он завершит обслуживание своего клиентатерминатор.Поэтому, если я запускаю новый поток для каждого сокета, теоретически возможно, что большое количество потоков будет простаивать (ожидая данных в сокете), но все еще считается работающим, и, таким образом, ThreadPool
не сможетвыделение новых потоков и обслуживание других клиентов.С другой стороны, использование предварительно определенного числа потоков для обслуживания всех сокетов не позволяет оптимально использовать несколько ядер машины.
Я предполагаю, что есть лучший способ сделать это ... Есть предложения?
Спасибо.