Поддержание большого количества открытых сокетов в приложении ac # - PullRequest
3 голосов
/ 27 мая 2011

Я пишу приложение на C #, в котором я хочу поддерживать большое количество открытых соединений с сокетами (tcp) и иметь возможность отвечать на данные, поступающие со всех из них. Теперь, что нужно сделать (afaik), это вызвать BeginRead для всех из них, но, насколько я знаю, BeginRead порождает поток, сидит и ждет данных в этом потоке, и я читал, что потоки этого не делают имеют тенденцию очень хорошо масштабироваться при использовании многих из них. Хотя я могу ошибаться, если это так, просто скажите мне.

Это, вероятно, покажется идиотским, но я хочу иметь возможность поддерживать как можно больше открытых соединений с сокетами (насколько позволяет мой компьютер / операционная система), в то же время имея возможность реагировать на данные, поступающие с любого из них как можно быстрее, используя для этого как можно меньше системных ресурсов.

Я подумал о том, чтобы поместить их все в какой-то список, а затем запустить один поток в цикле, проверяя их на наличие новых данных и воздействуя на эти новые данные (если они есть), хотя я я бы подумал, что подобный цикл закончится тем, что он будет жарить мой процессор (потому что в цикле нет ничего, что блокирует). Есть ли способ (простой или нет, я не против войти в более сложные алгоритмы, чтобы решить это), что я могу достичь этого? Любая помощь будет оценена.

1 Ответ

5 голосов
/ 27 мая 2011

Нет.Асинхронные методы не порождают потоки, они используют Порты завершения ввода-вывода .

Методы BeginXXX устарели.Вместо этого используйте методы XxxxAsync.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...