Как улучшить масштабируемость сервера TCP / IP при ограничении пулом потоков приложений - PullRequest
0 голосов
/ 08 июля 2011

У меня есть сервер TCP / IP, написанный на C # .net, который может легко иметь 10 000 соединений одновременно.Однако, когда обратный вызов получен из сокета, он обрабатывается новым потоком в пуле потоков приложения.Это означает, что реальное ограничение одновременной связи сводится к количеству потоков в пуле потоков.Например, если все эти 10 000 подключений пытаются отправить данные одновременно, большинству придется ждать, пока пул потоков проходит так быстро, как только может.Может ли кто-нибудь поделиться своим опытом работы с высокопроизводительными сервисами сокетов и посоветовать, как крупная корпорация может обеспечить 10000 подключений, которые могут быть не только подключены одновременно, но и одновременно работать?Спасибо

Ответы [ 2 ]

2 голосов
/ 08 июля 2011

Не обрабатывать пакеты, встроенные в обратный вызов.Выполните там абсолютную минимальную работу, а затем передайте их отдельному пулу рабочих потоков через очередь производителя-потребителя, которая (в идеале) никогда не блокирует потоки производителя, которые являются вашими прослушивателями сокетов. BlockingCollection <T> может быть полезно здесь.

Вы должны быть осторожны, чтобы очередь не становилась неограниченной - если ваши потребители намного медленнее производителей, и очередь растет при нормальномНагрузка, у вас есть проблема, для которой регулирование, которое получает сеть, является очевидным решением, несмотря на его нежелательность.

1 голос
/ 08 июля 2011

Вы делаете ошибку мысли здесь. Независимо от того, сколько у вас потоков, данные всегда должны ждать, если у вас нет одного ЦП ЯДРА НА СОЕДИНЕНИЕ Масштабируемость - это не неограниченный паралеллизм, а возможность обрабатывать большое количество соединений и поддерживать процессор на полной мощности.

Пул потоков идеально подходит для этого. Как только процессор достигает полной загрузки, вы все равно больше ничего не можете сделать.

и посоветуйте, как крупная корпорация могла бы обеспечить 10000 подключений не только подключен одновременно, но также может общаться одновременно?

МНОГИЕ компьютеры, которые имеют в общей сложности 500 процессорных ядер. Хитрость в том, что задержка приемлема. Вам не нужно мгновенное общение. Вы пытаетесь справиться с этим не с того конца.

...