Epoll - Epoll

epoll a Linux yadrosi tizim qo'ng'irog'i birinchi bo'lib 2.5.44 versiyasida kiritilgan o'lchovli I / O hodisalari to'g'risida xabar berish mexanizmi uchun Linux yadrosi.[1] Uning vazifasi shundan iboratki, bir nechta fayllar tavsiflovchilarini ulardan birortasida kiritish-chiqarish imkoniyati mavjudligini tekshirish. Bu kattani almashtirishni nazarda tutadi POSIX tanlang (2) va so'rovnoma (2) tizim qo'ng'iroqlari, tomosha qilingan soni ko'proq talab qilinadigan dasturlarda yaxshi ishlashga erishish fayl tavsiflovchilari katta (ishlaydigan eski tizim qo'ng'iroqlaridan farqli o'laroq O (n) vaqt, epoll faoliyat yuritadi O(1) vaqt[2]).

epoll ga o'xshash FreeBSD "s kqueue, unda u to'plamdan iborat foydalanuvchi maydoni funktsiyalar, ularning har biri a fayl tavsiflovchi o'zaro hamkorlikda ishlaydigan konfiguratsiya qilinadigan yadro ob'ektini bildiruvchi dalil. epoll foydalanadi qizil-qora daraxt (RB-daraxt) ma'lumotlar tuzilishi, hozirda kuzatilayotgan barcha fayllar tavsiflovchilarini kuzatib borish.[3]

API

int epoll_create1(int bayroqlar);

Yaratadi epoll ob'ekt va uning fayl tavsiflovchisini qaytaradi. The bayroqlar parametr epoll xatti-harakatlarini o'zgartirishga imkon beradi. Uning faqat bitta haqiqiy qiymati bor, EPOLL_CLOEXEC. epoll_create () ning eski variantidir epoll_create1 () va Linux yadrosi 2.6.27 versiyasi va glibc 2.9 versiyasi bo'yicha eskirgan.[4]

int epoll_ctl(int epfd, int op, int fd, tuzilmaviy epoll_event *tadbir);

Ushbu ob'ekt qaysi fayl tavsiflovchilarini va qaysi hodisalar uchun tomosha qilinishini boshqaradi (sozlaydi). op qo'shish, o'zgartirish yoki o'chirish mumkin.

int epoll_wait(int epfd, tuzilmaviy epoll_event *voqealar, int maxevents, int taym-aut; turib qolish; tanaffus);

Bilan ro'yxatdan o'tgan har qanday tadbirlarni kutadi epoll_ctl, kamida bitta sodir bo'lguncha yoki kutish vaqti tugaguniga qadar. Sodir bo'lgan voqealarni qaytaradi voqealar, qadar maxevents birdaniga.

Tetiklash rejimlari

epoll ikkalasini ham ta'minlaydi chekka tetiklenir va darajadagi tetiklenir rejimlar. Chegaralangan rejimda qo'ng'iroq epoll_wait bilan yangi voqea tugagandan keyingina qaytadi epoll ob'ekt, darajadagi tetikli rejimda, epoll_wait sharti bor ekan qaytadi.

Masalan, agar a quvur bilan ro'yxatdan o'tgan epoll ma'lumot oldi, qo'ng'iroq epoll_wait o'qish kerak bo'lgan ma'lumotlarning mavjudligini ko'rsatib, qaytib keladi. Deylik, o'quvchi buferdan faqat ma'lumotlarning bir qismini iste'mol qilgan. Darajali rejimda keyingi qo'ng'iroqlar epoll_wait trubaning buferida o'qilishi kerak bo'lgan ma'lumotlar bo'lsa, darhol qaytadi. Biroq, chekka tetiklenmiş rejimda, epoll_wait quvurga yangi ma'lumotlar yozilgandan keyingina qaytadi.

Tanqid

Bryan Kantril buni ta'kidladi epoll agar oldingilaridan o'rgangan bo'lsa, ularni oldini olish mumkin bo'lgan xatolarga yo'l qo'ygan: kirish / chiqishni yakunlash portlari, tadbir portlari (Solaris) va kqueue.[5] Biroq, uning tanqidining katta qismi murojaat qilingan epoll"s EPOLLONESHOT va EPOLLEKSKLUSIV imkoniyatlari. EPOLLONESHOT 2004 yil fevralida chiqarilgan Linux yadrosi magistralining 2.6.2 versiyasida qo'shilgan. EPOLLEKSKLUSIV 2016 yil mart oyida chiqarilgan 4.5 versiyasida qo'shilgan.[6]

Shuningdek qarang

Adabiyotlar

  1. ^ "epoll (7) - Linux uchun qo'llanma sahifasi". Man7.org. 2012-04-17. Olingan 2014-03-01.
  2. ^ Oleksiy Kovyrin (2006-04-13). "Asolxron tarmoq dasturlash uchun epoll () dan foydalanish". Kovyrin.net. Olingan 2014-03-01.
  3. ^ https://idndx.com/2014/09/01/the-implementation-of-epoll-1/
  4. ^ Sevgi, Robert (2013). Linux tizim dasturlari (Ikkinchi nashr). O'Rayli. 97, 98-betlar. ISBN  978-1-449-33953-1.
  5. ^ https://www.youtube.com/watch?v=l6XQUciI-Sc&t=57m
  6. ^ "Epoll tubdan buzilgan 1/2". idea.popcount.org. 2017-02-20. Olingan 2017-10-06.

Tashqi havolalar