различие между асинхронными вызовами и асинхронным io призывает .NET

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

Можно также сделать асинхронные вызовы к функциям IO (как чтение из сокетов, файлов, веб-страниц, и т.д.). Я думаю (но я не уверен), это НЕ порождает workitem в пуле потоков. Только после того, как результат получен (или ошибка), обратный вызов, названный от нового потока в пуле потоков.

Это предположение корректно? Или асинхронный вызов IO, также под покрытиями просто некоторый поток, который порожден? Если это верно, как асинхронные вызовы могут быть немного лучше производительными, чем родительские потоки (использующий пул потоков) самостоятельно и блок?

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

8
задан Toad 5 March 2010 в 08:37
поделиться

1 ответ

Асинхронный ввод-вывод - это гораздо более сложная вещь, чем просто использование другого потока из пула потоков.

Внутри ОС существует множество различных методов , которые поддерживают асинхронный ввод-вывод:

1 Сигнализация объекта ядра устройства

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

2 Сигнализация объекта ядра события

Разрешает несколько одновременных запросов ввода-вывода к одному устройству. Позволяет одному потоку выдавать запрос ввода-вывода, а другому потоку его обрабатывать.

3 Использование тревожного ввода-вывода

Разрешает несколько одновременных запросов ввода-вывода к одному устройству. Поток, выдавший запрос ввода-вывода, также должен его обработать.

4 Использование портов завершения ввода-вывода

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

7
ответ дан 5 December 2019 в 21:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: