libuv, кроссплатформенная библиотека, используемая во многих проектах для поддержки ввода-вывода.

либув

libuv — это кроссплатформенная библиотека поддержки, ориентированная на асинхронный ввод-вывод.

Недавно стало известно выход новой версии библиотеки libuv 1.45.0, который широко используется для мультиплексирования соединений и асинхронной обработки ввода-вывода во многих проектах, направленных на высокопроизводительную обработку файловых и сетевых запросов, например, на платформе Node.js, BIND 9 и Knot.

Для тех, кто не знает о libuv, они должны знать, что это — это кроссплатформенная библиотека C, обеспечивающая поддержку асинхронного ввода-вывода на основе циклов событий. Он поддерживает epoll Windows kqueue IOCP, порты событий Solaris, а в Linux это одна из библиотек, поддерживающих io_uring.



О либуве

либув в первую очередь предназначен для использования в Node.js, но он также используется другими программными проектами. Первоначально это была абстракция вокруг libev или Microsoft IOCP, поскольку libev не поддерживает IOCP в Windows.



Библиотека позволяет организовать неблокирующий цикл событий используя такие методы, как epoll в Linux, kqueue в BSD и macOS, IOCP в Windows и порты событий в Solaris.

Из выдающиеся особенности libuv:



  • Полнофункциональный цикл событий, поддерживаемый epoll, kqueue, IOCP, портами событий
  • Асинхронные сокеты TCP и UDP
  • Асинхронное разрешение DNS
  • Асинхронные операции с файлами и файловыми системами
  • События файловой системы
  • Escape-код ANSI, контролируемый TTY
  • IPC с совместным использованием сокетов, с использованием сокетов домена Unix или именованных каналов (Windows)
  • Вторичные процессы
  • пул потоков
  • обработка сигналов
  • часы с высоким разрешением
  • Примитивы многопоточности и синхронизации

Для приложений доступны кроссплатформенные функции для работы с сетевыми подключениями TCP и UDP в асинхронном режиме, асинхронное разрешение DNS, асинхронная работа с файлами, отслеживание событий файловой системы, организация IPC для совместного использования сокетов, организация обработки сигналов пула потоков и использование высокоточные таймеры.

Библиотека также включает примитивы для организации многопоточного выполнения и синхронизация потоков. Наряду с циклом событий используются два высокоуровневых абстрактных базовых примитива: «обработчики» для реализации долгоживущих объектов, выполняющих несколько операций, и «запросы» для выполнения краткосрочных запросов.



Основные новые функции libuv 1.45

Ключевым улучшением в новой версии является реализация долгожданной поддержки интерфейса асинхронного ввода/вывода io_uring предоставляется ядром Linux, начиная с версии 5.1.

Помимо этого, он также подчеркивает поддержка опроса ввода/вывода и возможность работы с буферизацией и без нее С помощью io_uring API разработчики ядра попытались устранить недостатки старого интерфейса aio. По производительности io_uring очень близок к SPDK и значительно превосходит libaio при включенном опросе.



в либуве, интерфейс io_uring можно использовать на платформах Linux с ядром 5.1+ в примитивах асинхронной обработки файлов такие как чтение, запись, fsync, fdatasync, stat, fstat и lstat. В других операционных системах и системах со старыми ядрами пул потоков все еще используется.

Упоминается, что тесты производительности показали, что использование io_uring в libuv может увеличить производительность в 8 раз. Работа по добавлению io_uring в libuv была поддержана ISC (Internet Systems Consortium), который использует рассматриваемую библиотеку на DNS-сервере BIND.

Другие улучшения в новой версии включают установка единого размера кучи 8 МБ для пула потоков на всех архитектурах и платформы.

Также подчеркивается, что добавлен новый API uv_metrics_info() для сбора метрик, таких как количество итераций в цикле обработки событий, общее количество обработанных событий и количество событий, ожидающих в очереди на момент отправки запроса.

Наконец, Если вам интересно узнать об этом больше, вы должны знать, что код проекта написан на C и распространяется под лицензией MIT. Вы можете проверить детали По следующей ссылке. 




2023-05-24T15:17:05
приложений