Kqueue - Kqueue

Kqueue kengaytirilgan voqea to'g'risida xabar berish interfeysi FreeBSD 4.1 2000 yil iyulda,[1][2] da qo'llab-quvvatlandi NetBSD, OpenBSD, DragonFly BSD va macOS. Dastlab Kqueue muallifi 2000 yilda Jonathan Lemon,[1][2] keyin bilan bog'liq FreeBSD Core Team. Kqueue shunga o'xshash dasturiy ta'minot uchun imkoniyat yaratadi nginx hal qilish c10k muammosi.[3][4]

Kqueue o'rtasida samarali kirish va chiqish hodisalari quvurlarini ta'minlaydi yadro va foydalanuvchi maydoni. Shunday qilib, voqea filtrlarini o'zgartirish va kutilayotgan voqealarni faqat bitta bittadan foydalangan holda qabul qilish mumkin tizim qo'ng'irog'i ga kevent (2) asosiy uchun voqea halqasi takrorlash. Bu qadimgi an'analarga zid keladi ovoz berish kabi tizim qo'ng'iroqlari so'rovnoma (2) va tanlang (2) ular unchalik samarasiz, ayniqsa, ko'plab fayllar tavsiflovchilaridagi voqealarni so'roq qilishda.

Kqueue nafaqat tutqich fayl tavsiflovchi hodisalar, shuningdek, boshqa turli xil bildirishnomalar uchun ishlatiladi fayllarni o'zgartirish monitoringi, signallari, asenkron I / O tadbirlar (AIO), bola jarayoni davlat o'zgarishi monitoringi va taymerlar qaysi qo'llab-quvvatlaydi nanosaniyali rezolyutsiyasi, shuningdek kqueue yadro tomonidan taqdim etilgan voqealardan tashqari foydalanuvchi tomonidan aniqlangan hodisalardan foydalanish usulini taqdim etadi.

Boshqalar operatsion tizimlar an'anaviy ravishda faqat qo'llab-quvvatlanadigan tanlang (2) va so'rovnoma (2) kabi hozirgi vaqtda yanada samarali ovoz berish alternativalarini taqdim etmoqda, masalan epoll kuni Linux va I / U tugatish portlari kuni Windows va Solaris.

libkqueue a foydalanuvchi maydoni amalga oshirish kyuki (2), bu qo'ng'iroqlarni operatsion tizimning asl backend hodisasi mexanizmiga tarjima qiladi.[5]

API[6]

Funktsiyaning prototiplari va turlari topilgan sys / event.h.

int kqueue(bekor);

Yadro voqealarining yangi navbatini yaratadi va identifikatorni qaytaradi.

int kevent(int kq, konst tuzilmaviy kevent *o'zgaruvchan, int o'zgarishlar, tuzilmaviy kevent *voqealar ro'yxati, int nevents, konst tuzilmaviy Timespec *taym-aut; turib qolish; tanaffus);

Voqealarni navbat bilan ro'yxatdan o'tkazish uchun foydalaniladi, keyin kutish va foydalanuvchiga kutilayotgan voqealarni qaytarish. Aksincha epoll, kqueue ro'yxatdan o'tish va hodisalarni kutish uchun bir xil funktsiyadan foydalanadi va bir nechta voqea manbalari bitta qo'ng'iroq yordamida ro'yxatdan o'tkazilishi va o'zgartirilishi mumkin. The o'zgaruvchan massiv yordamida voqealar navbatini kutish uchun qo'llaniladigan modifikatsiyani (kutish uchun voqealar turini o'zgartirish, yangi voqea manbalarini ro'yxatdan o'tkazish va hk) o'tkazish uchun foydalanish mumkin. nevents berilgan foydalanuvchi hajmi voqealar ro'yxati voqealar navbatidan voqealarni qabul qilish uchun ishlatiladigan massiv.

EV_SET(kev, identifikator, filtr, bayroqlar, pufaklar, ma'lumotlar, udata);

A-ni qulay ishga tushirish uchun ishlatiladigan so'l struct kevent ob'ekt.

Shuningdek qarang

Kqueue-ni qo'llab-quvvatlaydigan OS-dan mustaqil kutubxonalar:

Boshqa platformalar uchun Kqueue ekvivalenti:

  • Solaris, Windows va AIX-da: I / U tugatish portlari
  • Linuxda:
    • epoll tizim qo'ng'irog'i o'xshash, ammo bir xil bo'lmagan semantikaga ega. epoll fayl tavsiflovchisi I / U operatsiyasini bajarishga tayyor bo'lganligi to'g'risida xabar beradi, kqueue & IOCP so'ralgan operatsiya tugagandan keyin xabar beradi.
    • inotify fayl tizimidagi o'zgarishlarni sezadigan va ularni ilovalarga xabar beradigan Linux yadrosi quyi tizimi.

Adabiyotlar

  1. ^ a b Jonathan Lemon (2000). "kqueue, kevent - yadro hodisasi to'g'risida xabar berish mexanizmi". BSD o'zaro faoliyat ma'lumotnomasi. FreeBSD, OpenBSD, NetBSD, DragonFly BSD. Xulosa.
  2. ^ a b Jonathan Lemon (2001-05-01). Kqueue: umumiy va o'lchovli voqea to'g'risida xabar berish vositasi (PDF). FREENIX Track: 2001 USENIX yillik texnik konferentsiyasi. USENIX (2001 yil 25-30 iyun kunlari nashr etilgan). Xulosa.CS1 maint: sana formati (havola)
  3. ^ "Ulanishni qayta ishlash usullari". nginx.org.
  4. ^ Endryu Alekseyev (2012). "§14. Nginx". Emi Braunda; Greg Uilson (tahrir). Ochiq kodli dasturlarning arxitekturasi, II jild: tuzilishi, ko'lami va bir nechta qo'rqmas hacklar. Lulu.com. ISBN  9781105571817.
  5. ^ libkqueue kuni GitHub
  6. ^ kyuki (2) – FreeBSD Tizim qo'ng'iroqlari Qo'lda

Tashqi havolalar