Являются ли асинхронные сокеты в .net поточными? - PullRequest
2 голосов
/ 01 апреля 2011

Из http://msdn.microsoft.com/en-us/library/bbx2eya8.aspx похоже, что сокеты этого типа используют более одного потока, но я думаю, что асинхронные сокеты могут и должны работать в одном потоке (или с наименьшим ограниченным количеством потоков),поскольку они являются просто обратными вызовами от конечного автомата, который работает как интеллектуальный планировщик.

Мой вопрос таков: асинхронные сокеты порождают столько потоков, сколько имеется соединений, или есть какая-то верхняя граница количества порождаемых потоков, независимо отсколько соединений обрабатывает приложение.

Ответы [ 2 ]

2 голосов
/ 01 апреля 2011

Да и нет.Вся реальная работа выполняется стеком драйверов TCP / IP.Который не имеет проблем с обработкой нескольких неполных запросов IRP.Когда один из них завершается, APC запускается в потоке потоков, который, в свою очередь, в конечном итоге вызывает ваш обратный вызов завершения.Базовый объект операционной системы называется «порт завершения ввода / вывода», подробнее о нем вы можете прочитать в этой статье SDK .

1 голос
/ 01 апреля 2011

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

...