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