1: Socket.Select
следует сделать это, хотя я не склонен использовать этот подход лично;в частности, эти IList
становятся раздражающими при больших объемах
2: нет, наоборот;операции блокировки по существу используют неблокирование в фоновом режиме, но с воротами.Нет, они не создают потоков под капотом - если только вы не посчитаете обратный вызов, когда что-то будет входящим.У меня есть пример, который обслуживает 12k соединений с использованием SocketAsyncEventArgs
- количество потоков примерно равно 20. Среди намерений SocketAsyncEventArgs
есть следующее:
- гораздо проще эффективно объединять,не имея большого количества объектов, созданных / собранных для каждой операции
- , вы можете очень эффективно обрабатывать сценарий «данные доступны сейчас» без необходимости обратного вызова вообще (если метод возвращает false, вы должны немедленно обработать данные- обратного вызова не будет)
Для масштабируемости: async