libuv ، مكتبة متعددة المنصات تُستخدم في العديد من المشاريع لدعم الإدخال / الإخراج

libuv

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 ويتم توزيعه بموجب ترخيص معهد ماساتشوستس للتكنولوجيا. يمكنك التحقق من التفاصيل في الرابط التالي.