Является ли Socket ReceiveFromAsync многопоточным? - PullRequest
3 голосов
/ 29 июля 2010

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

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

Спасибо

1 Ответ

3 голосов
/ 04 марта 2011

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

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

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

...