Асинхронный ввод/вывод

Асинхронный ввод/вывод (Asynchronous I/O) - это форма обработки ввода/вывода, которая позволяет ЦП продолжать выполнение параллельно с процессом обмена данными.

Диск и сеть значительно медленнее, чем ЦП. Вместо того чтобы инициировать операцию ввода/вывода и ждать результата, ЦП может начать операцию ввода/вывода, как только станет известно, что данные будут нужны, и продолжать выполнение других инструкций, не зависящих от результата операции ввода/вывода.

Ниже приведены некоторые приблизительные сравнения для наглядности:

Устройство
Задержка
Пропускная способность

CPU L3 Кэш

10 нс

400 ГБ/с

Память

100 нс

100 ГБ/с

Диск (NVMe SSD)

400 мкс

380 МБ/с

Сеть

50 - 200 мс

1 Гб/с (125 МБ/с)

(Фактическая статистика диска, по данным fio для случайных чтений размером 2 КБ - около 190 тыс. IOPS)

К счастью, SSD-накопители могут выполнять операции параллельно, поэтому процессор может одновременно инициировать несколько запросов, продолжать выполнение и затем получать результаты нескольких операций примерно в одно и то же время.

Некоторые базы данных (например, lmdb / mdbx) используют память, отображенную в память, для чтения и записи на диск. К сожалению, память, отображенная в память, реализуется ядром (mmap) и не является асинхронной, поэтому выполнение блокируется во время ожидания завершения операции.

Больше информации об асинхронном вводе/выводе можно прочитать здесьarrow-up-right.

Last updated