libuv هي مكتبة دعم عبر الأنظمة الأساسية مع التركيز على الإدخال / الإخراج غير المتزامن.
أصبح معروفًا مؤخرًا إصدار الإصدار الجديد من مكتبة libuv 1.45.0 ، الذي يستخدم على نطاق واسع لتعدد إرسال الاتصال ومعالجة الإدخال / الإخراج غير المتزامن في العديد من المشاريع التي تهدف إلى معالجة عالية الأداء لطلبات الملفات والشبكات ، على سبيل المثال ، على النظام الأساسي Node.js و BIND 9 و Knot.
بالنسبة لأولئك الذين لا يعرفون عن libuv ، يجب أن يعرفوا ذلك هي مكتبة C عبر الأنظمة الأساسية توفر دعمًا لعمليات الإدخال / الإخراج غير المتزامنة استنادًا إلى حلقات الأحداث. وهو يدعم epoll Windows kqueue IOCP ومنافذ الأحداث Solaris وعلى Linux ، فهو أحد المكتبات التي تدعم io_uring.
حول libuv
libuv تم تصميمه بشكل أساسي للاستخدام في Node.js ، ولكن يتم استخدامه أيضًا بواسطة مشاريع برمجية أخرى. في الأصل ، كان تجريدًا حول libev أو Microsoft IOCP ، نظرًا لأن libev لا يدعم IOCP على Windows.
المكتبة يسمح بتنظيم حلقة من الأحداث غير المحظورة باستخدام طرق مثل epoll على Linux و kqueue على BSD و macOS و IOCP على Windows ومنافذ الأحداث على Solaris
من السمات البارزة لـ libuv:
- حلقة أحداث كاملة الميزات مدعومة من epoll و kqueue و IOCP ومنافذ الأحداث
- مآخذ TCP و UDP غير متزامنة
- قرار DNS غير متزامن
- العمليات غير المتزامنة لأنظمة الملفات والملفات
- أحداث نظام الملفات
- كود هروب ANSI المتحكم فيه TTY
- IPC مع مشاركة المقبس ، باستخدام مآخذ مجال Unix أو الأنابيب المسماة (Windows)
- العمليات الثانوية
- تجمع موضوع
- التعامل مع الإشارة
- ساعة عالية الدقة
- أساسيات الترابط والتزامن
تتوفر ميزات عبر الأنظمة الأساسية للتطبيقات للعمل مع اتصالات شبكة TCP و UDP في الوضع غير المتزامن ، ودقة DNS غير المتزامنة ، والعمل غير المتزامن مع الملفات ، وتتبع أحداث نظام الملفات ، وتنظيم IPC لمشاركة المقبس ، وتنظيم معالجة إشارة تجمع الخيوط واستخدام أجهزة توقيت عالية الدقة.
المكتبة يتضمن أيضًا العناصر الأساسية لتنظيم التنفيذ متعدد الخيوط ومزامنة الخيط. إلى جانب حلقة الحدث ، يتم استخدام عنصرين أساسيين أساسيين تجريديين رفيعي المستوى: "معالجات" لتنفيذ كائنات طويلة العمر تؤدي عمليات متعددة ، و "طلبات" لتنفيذ طلبات قصيرة العمر.
الميزات الرئيسية الجديدة لـ libuv 1.45
تحسين رئيسي في الإصدار الجديد هو تنفيذ الدعم الذي طال انتظاره لواجهة الإدخال / الإخراج غير المتزامنة io_uring تم توفيره بواسطة Linux kernel منذ الإصدار 5.1.
بالإضافة إلى ذلك ، فإنه يسلط الضوء أيضًا على ملف دعم الاقتراع I / O والقدرة على العمل مع وبدون التخزين المؤقت باستخدام io_uring API ، حاول مطورو kernel معالجة أوجه القصور في واجهة aio القديمة. من حيث الأداء ، فإن io_uring قريب جدًا من SPDK ويتفوق بشكل كبير على libaio عند تمكين الاقتراع.
في libuv ، يمكن استخدام واجهة io_uring على أنظمة Linux الأساسية مع kernel 5.1+ في أساسيات معالجة الملفات غير المتزامنة مثل read و write و fsync و fdatasync و stat و fstat و lstat. في أنظمة التشغيل والأنظمة الأخرى ذات النواة الأقدم ، لا يزال مجمع مؤشرات الترابط مستخدمًا.
يذكر أن اختبارات الأداء أظهرت أن استخدام io_uring في libuv يمكن أن يحقق زيادة في الأداء بمقدار 8x. تم دعم عمل إضافة io_uring إلى libuv من قبل ISC (اتحاد أنظمة الإنترنت) ، والذي يستخدم المكتبة المعنية على خادم BIND DNS.
تشمل التحسينات الأخرى في الإصدار الجديد تعيين حجم كومة واحد 8 ميغا بايت لتجمع مؤشرات الترابط على كافة البنى والمنصات.
كما تم تسليط الضوء على ذلك أضاف واجهة برمجة تطبيقات جديدة uv_metrics_info () لجمع المقاييس ، مثل عدد التكرار في حلقة الحدث ، والعدد الإجمالي للأحداث التي تمت معالجتها ، وعدد الأحداث المنتظرة في قائمة الانتظار في وقت إرسال الطلب.
وأخيرا، إذا كنت مهتمًا بمعرفة المزيد عنها ، يجب أن تعلم أن كود المشروع مكتوب بلغة C ويتم توزيعه بموجب ترخيص معهد ماساتشوستس للتكنولوجيا. يمكنك التحقق من التفاصيل في الرابط التالي.