libuv, wieloplatformowa biblioteka używana w wielu projektach do obsługi wejścia/wyjścia

libacja

libuv to wieloplatformowa biblioteka wspierająca, skupiająca się na asynchronicznych wejściach/wyjściach.

Niedawno stał się znany wydanie nowej wersji biblioteki libuv 1.45.0, który jest szeroko stosowany do multipleksowania połączeń i asynchronicznego przetwarzania we/wy w wielu projektach mających na celu wydajne przetwarzanie żądań plików i sieci, na przykład na platformie Node.js, BIND 9 i Knot.

Ci, którzy nie znają libuv, powinni wiedzieć, że to to międzyplatformowa biblioteka C, która zapewnia obsługę asynchronicznego wejścia/wyjścia w oparciu o pętle zdarzeń. Obsługuje epoll Windows kqueue IOCP, porty zdarzeń Solaris, aw systemie Linux jest jedną z bibliotek obsługujących io_uring.

O libuv

libacja jest przeznaczony przede wszystkim do użytku w Node.js, ale jest również używany przez inne projekty oprogramowania. Pierwotnie była to abstrakcja wokół libev lub Microsoft IOCP, ponieważ libev nie obsługuje IOCP w systemie Windows.

Biblioteka pozwala na zorganizowanie nieblokującej się pętli wydarzeń przy użyciu metod takich jak epoll w systemie Linux, kqueue w systemach BSD i macOS, IOCP w systemie Windows oraz porty zdarzeń w systemie Solaris

Z wyjątkowe cechy libuv:

  • W pełni funkcjonalna pętla zdarzeń obsługiwana przez epoll, kqueue, IOCP, porty zdarzeń
  • Asynchroniczne gniazda TCP i UDP
  • Asynchroniczne rozpoznawanie DNS
  • Operacje asynchroniczne plików i systemów plików
  • Zdarzenia systemu plików
  • Kod ucieczki ANSI kontrolowany przez TTY
  • IPC z udostępnianiem gniazd, przy użyciu gniazd domeny Unix lub nazwanych potoków (Windows)
  • Procesy wtórne
  • pula wątków
  • obsługa sygnału
  • zegar o wysokiej rozdzielczości
  • Prymitywy wątków i synchronizacji

Dla aplikacji dostępne są funkcje międzyplatformowe do pracy z połączeniami sieciowymi TCP i UDP w trybie asynchronicznym, asynchronicznym rozwiązywaniem DNS, asynchroniczną pracą z plikami, śledzeniem zdarzeń w systemie plików, organizacją IPC do współdzielenia gniazd, organizacją puli wątków, przetwarzaniem sygnału i wykorzystaniem precyzyjne zegary.

Biblioteka obejmuje również prymitywy do organizowania wykonywania wielowątkowego i synchronizację wątków. Wraz z pętlą zdarzeń używane są dwa abstrakcyjne podstawowe prymitywy wysokiego poziomu: „procedury obsługi” do implementacji długotrwałych obiektów, które wykonują wiele operacji, oraz „żądania” do wykonywania krótkotrwałych żądań.

Główne nowe funkcje libuv 1.45

Kluczowym ulepszeniem w nowej wersji jest tzw wdrożenie długo oczekiwanej obsługi asynchronicznego interfejsu I/O io_uring dostarczane przez jądro Linuksa od wersji 5.1.

Oprócz tego podkreśla również obsługa odpytywania I/O oraz możliwość pracy z buforowaniem i bez buforowania Za pomocą interfejsu API io_uring twórcy jądra próbowali zaradzić niedociągnięciom starego interfejsu aio. Pod względem wydajności io_uring jest bardzo zbliżony do SPDK i znacznie przewyższa libaio, gdy włączone jest odpytywanie.

w Libuwie, interfejs io_uring może być używany na platformach Linux z jądrem 5.1+ w asynchronicznych operacjach podstawowych manipulacji plikami takie jak odczyt, zapis, fsync, fdatasync, stat, fstat i lstat. W innych systemach operacyjnych i systemach ze starszymi jądrami pula wątków jest nadal używana.

Wspomniano, że testy wydajności wykazały, że użycie io_uring w libuv może osiągnąć 8-krotny wzrost wydajności. Prace nad dodaniem io_uring do libuv były wspierane przez ISC (Internet Systems Consortium), które korzysta z omawianej biblioteki na serwerze BIND DNS.

Inne ulepszenia w nowej wersji to m.in ustawienie pojedynczego rozmiaru sterty 8 MB dla puli wątków na wszystkich architekturach i platformy.

Podkreśla się również, że dodano nowe API uv_metrics_info() do zbierania metryk, takie jak liczba iteracji w pętli zdarzeń, łączna liczba przetworzonych zdarzeń oraz liczba zdarzeń oczekujących w kolejce w momencie wysłania żądania.

Wreszcie, Jeśli chcesz dowiedzieć się więcej na ten temat, powinieneś wiedzieć, że kod projektu jest napisany w C i jest rozpowszechniany na licencji MIT. Możesz sprawdzić szczegóły W poniższym linku. 


Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.