Цитата из статьи, которую вы включили в свой комментарий к ответу @ Alex.
В ситуациях, когда запрос ввода-вывода
Ожидается, что потребуется большое количество
время, такое как обновление или резервное копирование
большая база данных или медленный
канал связи, асинхронный ввод / вывод
как правило, это хороший способ оптимизировать
эффективность обработки. Однако для
относительно быстрые операции ввода-вывода,
накладные расходы на обработку ввода / вывода ядра
запросы и сигналы ядра могут сделать
асинхронный ввод / вывод менее выгоден,
особенно если много быстрого ввода / вывода
операции должны быть сделаны. В этом
В этом случае синхронный ввод-вывод был бы лучше.
Механизмы и реализация
детали того, как выполнить эти
задачи варьируются в зависимости от типа
дескриптор устройства, которое используется и
особые потребности приложения.
Другими словами, обычно есть
несколько способов решения проблемы.
FWIW, я думаю, что @Alex правильно, что есть другой поток, выполняющий код ядра, связанный с вашим запросом ввода-вывода. Тем не менее, этот поток не управляется вашим приложением. Поток, выполняющий код ядра, может сам заблокировать запрос ввода-вывода устройства и подождать, пока фактическое оборудование завершит запрос, прежде чем сигнализировать потоку пользовательского режима, но тем не менее он все еще там.
Использование асинхронных потоков не следует рассматривать как способ увеличения скорости любого конкретного запроса, а скорее как способ повысить общую эффективность, позволяя вашему приложению продолжать обработку других задач, ожидая относительно медленного ввода-вывода .