Асинхронный ввод-вывод и асинхронный RPC
Асинхронный ввод-вывод — это эффективное средство для одного потока для одновременного управления несколькими запросами ввода-вывода. Асинхронный RPC на сервере выполняет аналогичную задачу для запросов RPC. В версиях Windows, предшествующих Windows Vista, не рекомендуется публиковать асинхронные запросы ввода-вывода из серверных процедур с использованием асинхронного RPC. Однако в Windows Vista и более поздних версиях Windows асинхронные запросы ввода-вывода, связанные с портом завершения ввода-вывода, поддерживаются асинхронным RPC.
До windows Vista асинхронный вызов удаленной процедуры может завершиться до завершения асинхронного запроса ввода-вывода. После завершения асинхронного вызова его поток может завершиться, если среда выполнения RPC решит, что имеет достаточное количество доступных потоков для обслуживания ожидаемой рабочей нагрузки. Система привязывает все запросы ввода-вывода к потоку, который их инициирует. Если поток завершается, все запросы ввода-вывода, ожидающие выполнения в этом потоке, прерываются. Ожидающие запросы ввода-вывода не могут быть перемещены в другой поток.
Поэтому конструкторы приложений, предназначенные для версий Windows до Windows Vista, могут либо использовать синхронные операции ввода-вывода в серверных процедурах, либо перенаправлять все запросы, включающие асинхронный ввод-вывод, в процедуры, выполняемые в пуле потоков, которым управляет приложение. API Windows предоставляет функции для управления пулом потоков. См. раздел Функции процессов и потоков.