libuv, una biblioteca multiplataforma utilitzada en molts projectes per al suport per a E/S

libuv

libuv és una biblioteca de suport multiplataforma amb un enfocament a E/S asíncrona.

Fa poc es va donar a conèixer el llançament de la nova versió de la biblioteca libuv 1.45.0, la qual és àmpliament utilitzada per a multiplexació de connexions i processament d'E/S asíncron en molts projectes destinats al processament d'alt rendiment de sol·licituds de xarxa i fitxers, per exemple, a la plataforma Node.js, BIND 9 i Knot.

Per als que desconeixen de libuv, han de saber que aquesta és una biblioteca multiplataforma C que ofereix suport per a E/S asíncrona basada en bucles d'esdeveniments. És compatible amb epoll Windows kqueue IOCP, ports d'esdeveniments de Solaris ia Linux és una de les biblioteques que ofereix suport a io_uring.

Sobre libuv

libuv està dissenyat principalment per al seu ús a Node.js, però també ho fan servir altres projectes de programari. Originalment, era una abstracció al voltant de libev o Microsoft IOCP, ja que libev no és compatible amb IOCP a Windows.

la biblioteca permet organitzar un bucle d'esdeveniments sense bloqueig utilitzant mètodes com epoll a Linux, kqueue a BSD i macOS, IOCP a Windows i ports d'esdeveniments a Solaris

De les característiques que es destaquen de libuv:

  • Bucle d'esdeveniments amb totes les funcions recolzat per epoll, kqueue, IOCP, ports d'esdeveniments
  • Sockets TCP i UDP asíncrons
  • Resolució DNS asíncrona
  • Operacions asincròniques de fitxers i sistemes de fitxers
  • Esdeveniments del sistema de fitxers
  • Codi d'escapament ANSI controlat TTY
  • IPC amb ús compartit de sockets, utilitzant sockets de domini Unix o canalitzacions amb nom (Windows)
  • Processos secundaris
  • Grup de subprocessos
  • Maneig de senyals
  • rellotge d'alta resolució
  • Primitives d'enfilat i sincronització

Les funcions multiplataforma estan disponibles perquè les aplicacions treballin amb connexions de xarxa TCP i UDP en mode asíncron, resolució de DNS asíncron, treball asíncron amb arxius, seguiment d'esdeveniments al sistema de fitxers, organització d'IPC per compartir sockets, organització d'un grup de subprocessos processament de senyals i ús de temporitzadors dalta precisió.

la biblioteca també inclou primitives per organitzar l'execució de subprocessos múltiples i la sincronització de subprocessos. Juntament amb el bucle d'esdeveniments, s'utilitzen dues primitives bàsiques abstractes d'alt nivell: manejadors per implementar objectes de llarga durada que realitzen múltiples operacions i sol·licituds per fer sol·licituds de curta durada.

Principals novetats de libuv 1.45

Una millora clau en la nova versió és la implementació de la compatibilitat tan esperada amb la interfície d'E/S asíncrona io_uring proporcionada pel nucli de Linux des de la versió 5.1.

A més, també es destaca la compatibilitat amb el sondeig d'E/S i la capacitat de treballar amb i sense emmagatzematge a memòria intermèdia amb l'API io_uring, els desenvolupadors del nucli van intentar abordar les deficiències de l'antiga interfície aio. En termes de rendiment, io_uring està molt a prop de SPDK i supera significativament libai quan el sondeig està habilitat.

A libuv, la interfície io_uring es pot fer servir en plataformes Linux amb kernel 5.1+ en primitives de manipulació d'arxius asincrònics com a lectura, escriptura, fsync, fdatasync, stat, fstat i lstat. En altres sistemes operatius i sistemes amb nuclis més antics, se segueix utilitzant el grup de subprocessos.

S'esmenta que les proves de rendiment han demostrat que l'ús de io_uring a libuv pot aconseguir un augment de rendiment de 8 vegades. El treball d'afegir io_uring a libuv va ser recolzat per l'ISC (Internet Systems Consortium), que utilitza la biblioteca en qüestió al servidor BIND DNS.

Altres de les millores de la nova versió, destaca la configuració d'una única mida de pila de 8 MB per al grup de subprocessos a totes les arquitectures i plataformes.

També es destaca que s'ha afegit una nova API uv_metrics_info() per recopilar mètriques, com el recompte d'iteracions en el cicle d'esdeveniments, la quantitat total d'esdeveniments processats i la quantitat d'esdeveniments en espera a la cua en el moment en què es va enviar la sol·licitud.

Finalment, si estàs interessat en poder conèixer més a l'respecte, has de saber que el codi del projecte està escrit a C i es distribueix sota la llicència MIT. Pots consultar els detalls en el següent enllaç. 


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.