Pred kratkim je postalo znano izid nove različice knjižnice libuv 1.45.0, ki se pogosto uporablja za multipleksiranje povezav in asinhrono V/I obdelavo v številnih projektih, namenjenih visoko zmogljivi obdelavi datotek in omrežnih zahtev, na primer na platformi Node.js, BIND 9 in Knot.
Tisti, ki ne poznajo libuv, naj vedo, da je to je medplatformska knjižnica C, ki zagotavlja podporo za asinhroni V/I na podlagi dogodkovnih zank. Podpira epoll Windows kqueue IOCP, vrata dogodkov Solaris in v Linuxu je ena od knjižnic, ki podpira io_uring.
O libuv
libuv je primarno zasnovan za uporabo v Node.js, uporabljajo pa ga tudi drugi programski projekti. Prvotno je šlo za abstrakcijo okoli libev ali Microsoft IOCP, saj libev ne podpira IOCP v sistemu Windows.
Knjižnica omogoča organizacijo neblokirajoče zanke dogodkov z uporabo metod, kot so epoll v Linuxu, kqueue v BSD in macOS, IOCP v sistemu Windows in vrata dogodkov v sistemu Solaris
Od izjemne lastnosti libuv:
- Celotna zanka dogodkov, ki jo podpirajo epoll, kqueue, IOCP, vrata za dogodke
- Asinhrone vtičnice TCP in UDP
- Asinhrona ločljivost DNS
- Asinhrono delovanje datotek in datotečnih sistemov
- Dogodki datotečnega sistema
- TTY nadzorovana ubežna koda ANSI
- IPC s souporabo vtičnic, z uporabo vtičnic domene Unix ali imenovanih cevi (Windows)
- Sekundarni procesi
- bazen niti
- obdelava signalov
- ura visoke ločljivosti
- Nitni in sinhronizacijski primitivi
Za aplikacije so na voljo medplatformske funkcije za delo z omrežnimi povezavami TCP in UDP v asinhronem načinu, asinhrono razreševanje DNS, asinhrono delo z datotekami, sledenje dogodkom datotečnega sistema, organizacijo IPC za skupno rabo vtičnic, organizacijo obdelave signalov skupine niti in uporabo visoko natančni časovniki.
Knjižnica vključuje tudi primitive za organiziranje večnitnega izvajanja in sinhronizacijo niti. Skupaj z zanko dogodkov se uporabljata dva visokonivojska abstraktna osnovna primitiva: »obravnavalniki« za implementacijo dolgotrajnih objektov, ki izvajajo več operacij, in »zahteve« za izvajanje kratkotrajnih zahtev.
Glavne nove funkcije libuv 1.45
Ključna izboljšava v novi različici je izvedba dolgo pričakovane podpore za asinhroni V/I vmesnik io_uring zagotavlja jedro Linuxa od različice 5.1.
Poleg tega poudarja tudi podpora za I/O polling in možnost dela z in brez medpomnilnika Z API-jem io_uring so razvijalci jedra poskušali odpraviti pomanjkljivosti starega vmesnika aio. Kar zadeva zmogljivost, je io_uring zelo blizu SPDK in znatno prekaša libaio, ko je omogočeno glasovanje.
v libuv, vmesnik io_uring se lahko uporablja na platformah Linux z jedrom 5.1+ v primitivih za asinhrono upravljanje datotek kot so branje, pisanje, fsync, fdatasync, stat, fstat in lstat. V drugih operacijskih sistemih in sistemih s starejšimi jedri se področje niti še vedno uporablja.
Omenjeno je, da so testi zmogljivosti pokazali, da lahko uporaba io_uring v libuv doseže 8-kratno povečanje zmogljivosti. Delo pri dodajanju io_uring v libuv je podprl ISC (Internet Systems Consortium), ki uporablja zadevno knjižnico na strežniku BIND DNS.
Druge izboljšave v novi različici vključujejo nastavitev ene same velikosti kopice 8 MB za področje niti na vseh arhitekturah in platforme.
Poudarjeno je tudi, da dodan nov API uv_metrics_info() za zbiranje meritev, kot je število ponovitev v zanki dogodkov, skupno število obdelanih dogodkov in število dogodkov, ki čakajo v čakalni vrsti v času, ko je bila zahteva poslana.
Končno, Če vas zanima več o tem, vedeti morate, da je koda projekta napisana v C in se distribuira pod licenco MIT. Podrobnosti lahko preverite V naslednji povezavi.