libuv - bu asinxron kiritish-chiqarishga yo'naltirilgan platformalararo qo'llab-quvvatlash kutubxonasi.
Yaqinda ma'lum bo'ldi libuv kutubxonasining 1.45.0 yangi versiyasining chiqarilishi, fayl va tarmoq so'rovlarini yuqori samarali qayta ishlashga qaratilgan ko'plab loyihalarda ulanishni multiplekslash va asinxron kiritish-chiqarishni qayta ishlash uchun keng qo'llaniladi, masalan, Node.js platformasida, BIND 9 va Knot.
Libuv haqida bilmaganlar uchun ular buni bilishlari kerak hodisalar tsikllari asosida asinxron kiritish-chiqarishni qo'llab-quvvatlaydigan o'zaro platforma C kutubxonasi. U epoll Windows kqueue IOCP, Solaris voqea portlarini qo'llab-quvvatlaydi va Linuxda u io_uringni qo'llab-quvvatlaydigan kutubxonalardan biridir.
Libuv haqida
libuv birinchi navbatda Node.js da foydalanish uchun mo'ljallangan, lekin u boshqa dasturiy loyihalar tomonidan ham qo'llaniladi. Dastlab, bu libev yoki Microsoft IOCP atrofidagi mavhumlik edi, chunki libev Windowsda IOCP ni qo'llab-quvvatlamaydi.
Kutubxona hodisalarning bloklanmaydigan tsiklini tashkil qilish imkonini beradi Linux-da epoll, BSD va macOS-da kqueue, Windows-da IOCP va Solaris-dagi voqea portlari kabi usullardan foydalanish
Of libuvning ajoyib xususiyatlari:
- Epoll, kqueue, IOCP, voqea portlari tomonidan qo'llab-quvvatlanadigan to'liq xususiyatli voqealar tsikli
- Asinxron TCP va UDP soketlari
- Asinxron DNS ruxsati
- Fayllar va fayl tizimlarining asinxron operatsiyalari
- Fayl tizimi hodisalari
- TTY tomonidan boshqariladigan ANSI qochish kodi
- Unix domen soketlari yoki nomli quvurlar (Windows) yordamida rozetka almashishga ega IPC
- Ikkilamchi jarayonlar
- iplar hovuzi
- signal bilan ishlash
- yuqori aniqlikdagi soat
- Yivlash va sinxronlash primitivlari
Kross-platforma funktsiyalari ilovalar uchun TCP va UDP tarmoq ulanishlari bilan asinxron rejimda ishlash, asinxron DNS ruxsati, fayllar bilan asinxron ishlash, fayl tizimi hodisalarini kuzatish, rozetkalarni almashish uchun IPC tashkil etish, ipli hovuz signalini qayta ishlashni tashkil etish va yuqori aniqlikdagi taymerlar.
Kutubxona ko'p tarmoqli bajarishni tashkil qilish uchun primitivlarni ham o'z ichiga oladi va ipni sinxronlashtirish. Voqealar sikli bilan bir qatorda ikkita yuqori darajadagi mavhum asosiy primitivlardan foydalaniladi: bir nechta operatsiyalarni bajaradigan uzoq muddatli ob'ektlarni amalga oshirish uchun "ishlovchilar" va qisqa muddatli so'rovlarni bajarish uchun "so'rovlar".
libuv 1.45 ning asosiy yangi xususiyatlari
Yangi versiyadagi asosiy yaxshilanish - bu io_uring asinxron I/U interfeysi uchun uzoq kutilgan yordamni amalga oshirish 5.1 versiyasidan beri Linux yadrosi tomonidan taqdim etilgan.
Bunga qo'shimcha ravishda, u ham ta'kidlaydi kiritish-chiqarish so'rovini qo'llab-quvvatlash va buferlash bilan va bufersiz ishlash qobiliyati io_uring API yordamida yadro ishlab chiquvchilari eski aio interfeysining kamchiliklarini bartaraf etishga harakat qilishdi. Ishlash nuqtai nazaridan, io_uring SPDK ga juda yaqin va so'rov yoqilganda libaio dan sezilarli darajada ustun turadi.
libuvda, io_uring interfeysi yadrosi 5.1+ bo'lgan Linux platformalarida ishlatilishi mumkin asinxron fayllarni manipulyatsiya qilish primitivlarida o'qish, yozish, fsync, fdatasync, stat, fstat va lstat kabi. Boshqa operatsion tizimlar va eski yadrolarga ega tizimlarda iplar havzasi hali ham qo'llaniladi.
Ta'kidlanishicha, unumdorlik testlari libuv-da io_uring-dan foydalanish unumdorlikni 8 baravar oshirishga erishish mumkinligini ko'rsatdi. Libuvga io_uring qo'shish ishi BIND DNS serverida ko'rib chiqilayotgan kutubxonadan foydalanadigan ISC (Internet Systems Consortium) tomonidan qo'llab-quvvatlandi.
Yangi versiyadagi boshqa yaxshilanishlar orasida barcha arxitekturalarda iplar hovuzi uchun yagona 8 MB hajmni o'rnatish va platformalar.
Bundan tashqari, ta'kidlangan ko'rsatkichlarni to'plash uchun yangi API uv_metrics_info() qo'shildi, voqealar siklidagi iteratsiyalar soni, qayta ishlangan hodisalarning umumiy soni va so‘rov yuborilgan vaqtda navbatda turgan voqealar soni kabi.
Nihoyat, Agar siz bu haqda ko'proq bilishni xohlasangiz, siz loyiha kodi C tilida yozilganligini va MIT litsenziyasi ostida tarqatilganligini bilishingiz kerak. Tafsilotlarni tekshirishingiz mumkin Quyidagi havolada.
Birinchi bo'lib izohlang