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