Как .NET использует потоки ввода-вывода или порты завершения ввода-вывода? - PullRequest
31 голосов
/ 12 февраля 2009

У нас есть приложение .NET, которое выполняет несколько одновременных вызовов к различным веб-службам, собирает их ответы, а затем выполняет несколько расчетов на основе этих ответов. Пытаясь получить дополнительную производительность, я исследовал использование подходов, в которых используются потоки ввода-вывода .NET через порты завершения ввода-вывода. Я прочитал несколько ресурсов, включая недавнюю книгу Джо Даффи «Параллельное программирование в Windows», и, хотя я «получаю» их полезность, я немного неясен относительно их поведения в .NET и ищу краткое объяснение.

1 Ответ

26 голосов
/ 12 февраля 2009

Скорее всего, вам не нужно ничего делать, если вы уже используете асинхронные методы. В зависимости от технологии, которую вы используете для вызова веб-службы, в конечном итоге он будет использовать API-интерфейс Win32, чтобы выполнить вызов для получения байтов из сети, и для этого он будет использовать завершение ввода-вывода. Порты для обработки асинхронных вызовов.

Основная предпосылка, лежащая в основе портов завершения ввода-вывода, заключается в том, что при ожидании операций ввода-вывода существует пул потоков, который продолжает ожидать завершения операций ввода-вывода (при условии, что вы зарегистрировались для использования портов завершения ввода-вывода). ). Когда ваша зарегистрированная операция завершается, поток из пула потоков порта завершения ввода / вывода используется для обработки обратного вызова.

Конечно, после вызова порта завершения ввода / вывода ваш поток может перейти к дополнительной работе или завершить работу, выбор за вами.

Следующее должно помочь описать это больше:

Порты завершения ввода / вывода:

http://msdn.microsoft.com/en-us/library/aa365198(VS.85).aspx

Внутренние порты завершения ввода / вывода (WayBack Machine):

https://web.archive.org/web/20101101112358/http://doc.sch130.nsc.ru/www.sysinternals.com/ntw2k/info/comport.shtml

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...