Является ли Socket ReceiveFromAsync неявно многопоточным?

В настоящее время я работаю над высокопроизводительным приложением Raw socket.

Я использую ReceiveFromAsync для получения пакетов. Это может звучать как глупый вопрос, но является ли это неявным потоком? Я не уверен, нужно ли мне брать полученный пакет и отключать его обработку, чтобы убедиться, что я не блокирую дополнительные пакеты, пока обрабатываю текущий. В документации об этом не упоминается. Пример кода для сокетов 3.5 не обрабатывает его, поэтому я изначально предполагал, что он обрабатывается неявно.

Спасибо


person Waterboy4800    schedule 29.07.2010    source источник


Ответы (1)


Все функции Async IO создают/используют порт завершения ввода-вывода, который представляет собой очередь запросов, отправленных процессом. Всякий раз, когда процесс делает Asynch IO call, этот запрос отправляется в эту очередь. Затем специальный пул потоков обрабатывает эти запросы ввода-вывода, это kernel threads. Поэтому, если вы рассматриваете эту системную сантехнику (these kernel threads) как часть вашей многопоточности, да, ваш код является многопоточным.

Если вы рассматриваете абстракцию, предоставленную вам через вызовы Async IO, как отправную точку, то, вероятно, ваш код не является многопоточным.

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

person Sanjeevakumar Hiremath    schedule 04.03.2011