kqueue
Kqueue هي واجهة إشعارات أحداث قابلة للتوسع، تم تقديمها في FreeBSD 4.1 في يوليو 2000، [ 1 ] [ 2 ] وهي مدعومة أيضًا في NetBSD و OpenBSD و DragonFly BSD و macOS . قام جوناثان ليمون بتطوير Kqueue في عام 2000، [ 1 ] [ 2 ] وكان حينها عضوًا في فريق FreeBSD الأساسي . تُمكّن Kqueue برامج مثل nginx من حل مشكلة c10k . [ 3 ] [ 4 ] يشير مصطلح "kqueue" إلى وظيفتها كـ "قائمة انتظار أحداث النواة". [ 1 ] [ 2 ]
توفر Kqueue مسارات فعالة لإدخال وإخراج الأحداث بين نواة النظام ومساحة المستخدم . وبالتالي، يُمكن تعديل مرشحات الأحداث واستقبال الأحداث المعلقة باستخدام استدعاء نظام واحد فقط لكل دورة من دورات حلقة الأحداثkevent(2) الرئيسية . وهذا يختلف عن استدعاءات نظام الاستقصاء التقليدية القديمة، مثل ` and` و`and` ، والتي تُعد أقل كفاءة، خاصةً عند استقصاء الأحداث على العديد من مُعرّفات الملفات.poll(2)select(2)
لا يقتصر دور Kqueue على معالجة أحداث واصفات الملفات فحسب ، بل يُستخدم أيضًا في العديد من الإشعارات الأخرى، مثل مراقبة تعديلات الملفات ، والإشارات ، وأحداث الإدخال/الإخراج غير المتزامنة (AIO)، ومراقبة تغيير حالة العمليات الفرعية ، والمؤقتات التي تدعم دقة النانوثانية . علاوة على ذلك، يوفر Kqueue إمكانية استخدام أحداث مُعرَّفة من قِبل المستخدم بالإضافة إلى تلك التي توفرها نواة النظام.
بعض أنظمة التشغيل الأخرى التي كانت تدعم تقليديًا فقط select(2)، والتي poll(2)توفر حاليًا أيضًا بدائل استطلاع أكثر كفاءة، مثل epoll على Linux ومنافذ إكمال الإدخال/الإخراج على Windows و Solaris .
libkqueue[ 5 ] هو تطبيق لمساحة المستخدم لـ kqueue(2)، والذي يترجم الاستدعاءات إلى آلية أحداث الواجهة الخلفية الأصلية لنظام التشغيل.
واجهة برمجة التطبيقات (API)
توجد نماذج الوظائف وأنواعها في [ 6 ]<sys/event.h> .
int kqueue ( void );يقوم بإنشاء قائمة انتظار أحداث جديدة للنواة ويعيد وصفًا لها.
int kevent ( int kq , const struct kevent * changelist , int nchanges , struct kevent * eventlist , int nevents , const struct timespec * timeout );تُستخدم هذه الدالة لتسجيل الأحداث في قائمة الانتظار، ثم انتظار أي أحداث معلقة وإعادتها إلى المستخدم. على عكس دالة epoll ، تستخدم kqueue نفس الدالة لتسجيل الأحداث وانتظارها، ويمكن تسجيل مصادر أحداث متعددة وتعديلها باستخدام استدعاء واحد. changelistيمكن استخدام المصفوفة لتمرير التعديلات (تغيير نوع الأحداث المراد انتظارها، تسجيل مصادر أحداث جديدة، إلخ) إلى قائمة انتظار الأحداث، والتي تُطبق قبل بدء انتظار الأحداث. neventsيُمثل حجم eventlistالمصفوفة التي يُدخلها المستخدم والتي تُستخدم لاستقبال الأحداث من قائمة انتظار الأحداث.
EV_SET ( kev , ident , filter , flags , fflags , data , udata );ماكرو يُستخدم لتهيئة الكائن بسهولة struct kevent.
انظر أيضاً
مكتبات مستقلة عن نظام التشغيل تدعم kqueue:
ما يعادل Kqueue على المنصات الأخرى:
- في أنظمة Solaris وWindows وAIX: منافذ إكمال عمليات الإدخال/الإخراج . لاحظ أن منافذ الإكمال تُعلم عند اكتمال عملية مطلوبة، بينما
kqueueيمكن للمنافذ الأخرى أيضًا أن تُعلم عندما يكون واصف الملف جاهزًا لتنفيذ عملية إدخال/إخراج. - على نظام لينكس:
- يحتوي استدعاء النظام epoll على دلالات متشابهة ولكنها ليست متطابقة.
- inotify هو نظام فرعي لنواة لينكس يقوم برصد التغييرات التي تطرأ على نظام الملفات وإبلاغ التطبيقات بها.
مراجع
- 1 2 3 جوناثان ليمون (2000). "kqueue، kevent — آلية إشعار أحداث النواة" . مرجع BSD المتقاطع . FreeBSD ، OpenBSD ، NetBSD ، DragonFly BSD .
- "kqueue، kevent -- آلية إشعار أحداث النواة". صفحات دليل FreeBSD .
- "kqueue، kevent، EV_SET — آلية إشعار أحداث النواة". خادم صفحة دليل OpenBSD .
- "kqueue، kevent -- آلية إشعار أحداث النواة". صفحات دليل DragonFly الإلكتروني .
- 1 2 3 جوناثان ليمون (1 مايو 2001). Kqueue: أداة عامة وقابلة للتوسع لإشعارات الأحداث (ملف PDF) . وقائع مسار FREENIX: المؤتمر التقني السنوي لـ USENIX لعام 2001. USENIX ( نُشر في الفترة من 25 إلى 30 يونيو 2001).
- ليمون، جوناثان (2001). "KQueue - مرفق إشعارات أحداث عام وقابل للتوسع" . Usenix .
- ↑ "طرق معالجة الاتصال" . nginx .org .
- ↑ أندرو أليكسييف (2012). "الفقرة 14. nginx" . في: آمي براون؛ جريج ويلسون (محرران). هندسة تطبيقات المصادر المفتوحة، المجلد الثاني: البنية، والحجم، وبعض الحيل الجريئة الأخرى . Lulu.com . ISBN 9781105571817.
- ↑ مكتبة libkqueue على GitHub
- ↑ – دليل استدعاءات نظام FreeBSD
روابط خارجية
- دليل استدعاءات نظام FreeBSD
- تُنفذ مكتبة libbrb_core تجريدًا لقاعدة موجهة نحو الأحداث، باستخدام
kqueue()استدعاء النظام kqueue()شفرة المصدر الخاصة باستدعاء النظام في نظام FreeBSDkqueue()شفرة المصدر الخاصة باستدعاء النظام في نظام OpenBSDkqueue()شفرة المصدر الخاصة باستدعاء النظام في نظام NetBSD- شفرة المصدر الخاصة
kqueue()باستدعاء النظام DragonFly BSD
- الأحداث (الحوسبة)
- برمجيات بي إس دي
- فري بي إس دي
- أوبن بي إس دي
- نظام التشغيل NetBSD
- دراجون فلاي بي إس دي
- نظام التشغيل macOS
- واجهات برمجة تطبيقات نظام التشغيل
- تقنية نظام التشغيل
- استدعاءات النظام
