Асинхронный ввод/вывод
Асинхронный ввод/вывод (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) и не является асинхронной, поэтому выполнение блокируется во время ожидания завершения операции.
Больше информации об асинхронном вводе/выводе можно прочитать здесь.
Last updated