В этой статье вы найдете краткий обзор портов завершения ввода-вывода (IOCP), а также простую C ++ реализацию копирования папки с файлами с помощью запросов ввода-вывода. Мы надеемся, что это руководство окажется полезным для всех, кто имеет базовый опыт работы с C ++ и Windows API, и поможет им изучить основы и некоторые особенности программирования WinAPI IOCP.
Обзор
Порты завершения ввода-вывода - это гибкий способ обработки нескольких запросов ввода-вывода с использованием пула потоков, выделенного ранее. Более того, они позволяют избежать потери производительности из-за переключения контекстов и из-за слишком большого или слишком малого количества рабочих потоков.
В основе IOCP лежит объект ядра Queue, который используется для хранения пакетов завершения ввода-вывода. Хотя пакеты помещаются в очередь IOCP в порядке FIFO, они могут быть извлечены в другом порядке.
Создание IOCP и связывание его с дескрипторами файлов выполняется с помощью функции API CreateloCompletionPort:
HANDLE
WINAPI
CreateIoCompletionPort(
_In_ HANDLE
FileHandle,
_In_opt_ HANDLE
ExistingCompletionPort,
_In_ ULONG_PTR
CompletionKey,
_In_ DWORD
NumberOfConcurrentThreads
);
Полную статью читайте здесь: Программирование WinAPI IOCP: масштабируемый файловый ввод-вывод
Автор:
Андрей Тимошенко,
Программный дизайнер компании «Априорит»