В этой статье вы найдете краткий обзор портов завершения ввода-вывода (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: масштабируемый файловый ввод-вывод

Автор:
Андрей Тимошенко,
Программный дизайнер компании «Априорит»