Libuv هي مكتبة دعم متعددة المنصات مع التركيز على I/O غير المتزامن. تم تطويره في المقام الأول لاستخدامه بواسطة Node.js ، ولكنه يستخدم أيضًا من قبل Luvit و Julia و Uvloop وغيرها.
حلقة حدث كاملة الميزة مدعومة من قبل Epoll و Kqueue و IOCP والمنافذ الأحداث.
مآخذ TCP و UDP غير متزامنة
قرار DNS غير المتزامن
عمليات ملفات ونظام الملفات غير المتزامنة
أحداث نظام الملفات
ANSI Escape Code يتحكم فيه TTY
IPC مع مشاركة المقبس ، باستخدام مآخذ مجال UNIX أو الأنابيب المسماة (Windows)
عمليات الطفل
بركة الموضوع
معالجة الإشارة
ساعة عالية الدقة
الخيوط البدائية والمزامنة
بدءًا من الإصدار 1.0.0 يتبع Libuv مخطط الإصدار الدلالي. تتغير واجهة برمجة التطبيقات وقواعد التوافق المتخلف هي تلك التي تشير إليها Semver. سوف Libuv الحفاظ على ABI مستقرة عبر الإصدارات الرئيسية.
يمكن تتبع تغييرات ABI/API هنا.
Libuv مرخصة بموجب ترخيص معهد ماساتشوستس للتكنولوجيا. تحقق من ملفات الترخيص والترخيص-Extra.
الوثائق مرخصة بموجب ترخيص CC بنسبة 4.0. تحقق من ملف ترخيص DOCS.
تقع في المستندات/ الدليل الفرعي. يستخدم إطار عمل SPHINX ، مما يجعل من الممكن إنشاء الوثائق بتنسيقات متعددة.
إظهار خيارات البناء المدعومة المختلفة:
$ make helpبناء الوثائق كـ HTML:
$ make htmlقم ببناء وثائق كـ HTML وإعادة تحميلها مباشرة عند تغييرها (وهذا يتطلب تثبيت sphinx-autobuild ويدعمه فقط على UNIX):
$ make livehtmlبناء الوثائق كصفحات رجل:
$ make manبناء الوثائق كـ epub:
$ make epubملاحظة: يحتاج مستخدمو Windows إلى استخدام Make.Bat بدلاً من "Make".
يمكن تصفح الوثائق عبر الإنترنت هنا.
تعمل الاختبارات والمعايير أيضًا كمواصفات API والاستخدام.
لا يتم التعامل مع هذه الموارد من قبل محفوظات Libuv وقد تكون قديمة. يرجى التحقق من ذلك قبل فتح قضايا جديدة.
يمكن تنزيل Libuv إما من مستودع GitHub أو من موقع التنزيلات.
قبل التحقق من علامات GIT أو ملفات التوقيع ، من الضروري استيراد المفاتيح ذات الصلة. يتم سرد معرفات المفاتيح في ملف المشرفين ، ولكنها متوفرة أيضًا ككائنات Git Blob لسهولة الاستخدام.
استيراد المفتاح بالطريقة المعتادة:
$ gpg --keyserver pool.sks-keyservers.net --recv-keys AE9BC059استيراد مفتاح من كائن blob git:
$ git show pubkey-saghul | gpg --importيتم توقيع علامات GIT مع مفتاح المطور ، ويمكن التحقق منها على النحو التالي:
$ git verify-tag v1.6.1بدءًا من libuv 1.7.0 ، يتم توقيع كرات القطران المخزنة في موقع التنزيلات وملف توقيع مصاحب إلى جانب كل منهما. بمجرد تنزيل كل من Tarball وملف التوقيع ، يمكن التحقق من الملف على النحو التالي:
$ gpg --verify libuv-1.7.0.tar.gz.signبالنسبة للمنصات التي تشبه UNIX ، بما في ذلك MacOS ، هناك طريقتان للبناء: Autotools أو Cmake.
بالنسبة لنظام التشغيل Windows ، تعتبر Cmake هي طريقة الإنشاء المدعومة الوحيدة ولديها المتطلبات الأساسية التالية:
PATH العالمي.للبناء مع Autotools:
$ sh autogen.sh
$ ./configure
$ make
$ make check
$ make installللبناء مع cmake:
$ mkdir -p build
$ (cd build && cmake .. -DBUILD_TESTING=ON) # generate project with tests
$ cmake --build build # add `-j <n>` with cmake >= 3.12
# Run tests:
$ (cd build && ctest -C Debug --output-on-failure)
# Or manually run tests:
$ build/uv_run_tests # shared library build
$ build/uv_run_tests_a # static library buildإلى المتقاطع مع cmake (غير مدعوم ولكن يعمل بشكل عام):
$ cmake ../..
-DCMAKE_SYSTEM_NAME=Windows
-DCMAKE_SYSTEM_VERSION=6.1
-DCMAKE_C_COMPILER=i686-w64-mingw32-gcc$ brew install --HEAD libuvملاحظة لمستخدمي OS X:
تأكد من تحديد الهندسة المعمارية التي ترغب في بنائها في علم "القوس". يمكنك تحديد أكثر من واحد عن طريق تحديد مساحة (على سبيل المثال "x86_64 i386").
$ git clone https://github.com/microsoft/vcpkg.git
$ ./bootstrap-vcpkg.bat # for powershell
$ ./bootstrap-vcpkg.sh # for bash
$ ./vcpkg install libuvيمكنك تثبيت ثنائيات تم إنشاؤها مسبقًا لـ Libuv أو إنشاءها من المصدر باستخدام Conan. استخدم الأمر التالي:
conan install --requires= " libuv/[*] " --build=missingيتم الحفاظ على وصفة Libuv Conan محدثة من قبل محفوظات Conan والمساهمين في المجتمع. إذا كان الإصدار قديمًا ، فيرجى إنشاء مشكلة أو سحب طلب على مستودع ConancenSerIndex.
بعض الاختبارات حساسة توقيت. قد تكون مهلة الاختبار الاسترخاء ضرورية على الآلات البطيئة أو الزائدة:
$ env UV_TEST_TIMEOUT_MULTIPLIER=2 build/uv_run_tests # 10s instead of 5s قائمة جميع الاختبارات في test/test-list.h .
سيؤدي هذا الاحتجاج إلى شوكة سائق الاختبار وتنفيذ TEST_NAME في عملية الطفل:
$ build/uv_run_tests_a TEST_NAMEسيؤدي هذا الاحتجاج إلى تنفيذ برنامج اختبار الاختبار في نفس العملية:
$ build/uv_run_tests_a TEST_NAME TEST_NAME عند تشغيل الاختبار من داخل عملية اختبار برنامج التشغيل ( build/uv_run_tests_a TEST_NAME TEST_NAME ) ، تعمل أدوات مثل GDB و Valgrind بشكل طبيعي.
عند إجراء الاختبار من طفل لعملية برنامج تشغيل الاختبار ( build/uv_run_tests_a TEST_NAME ) ، استخدم هذه الأدوات بطريقة مدركة للشوكة.
استخدم إعداد وضع المتابعة:
$ gdb --args build/uv_run_tests_a TEST_NAME
(gdb) set follow-fork-mode child
...
استخدم- --trace-children=yes المعلمة:
$ valgrind --trace-children=yes -v --tool=memcheck --leak-check=full --track-origins=yes --leak-resolution=high --show-reachable=yes --log-file=memcheck-%p.log build/uv_run_tests_a TEST_NAME انظر القسم الخاص باختبارات التشغيل. السائق القياسي هو ./uv_run_benchmarks_a ويتم سرد المعايير في test/benchmark-list.h
تحقق من ملف supported_platforms.
-fno-strict-aliasing يوصى بتشغيل علامة المترجم-- -fno-strict-aliasing في المشاريع التي تستخدم libuv. قد لا يكون استخدام "الميراث" المخصص في واجهة برمجة تطبيقات libuv آمنة في وجود تحسينات على المترجمة التي تعتمد على التعرج الصارم.
MSVC ليس لديه علامة مكافئة ولكن لا يبدو أنه يحتاجها في وقت كتابة هذا التقرير (ديسمبر 2019)
يتطلب تجميع AIX باستخدام IBM XL C/C ++ الإصدار 12.1 أو أكثر.
يتطلب دعم AIX لأحداث نظام الملفات حزمة IBM bos.ahafs غير الافتراضية. توفر هذه الحزمة البنية التحتية للحدث AIX الذي تم اكتشافه بواسطة autoconf . تصف وثائق IBM الحزمة بمزيد من التفصيل.
يتطلب تجميع Z/OS تثبيت Zoslib. عند البناء مع cmake ، استخدم flag -DZOSLIB_DIR لتحديد المسار إلى Zoslib:
$ (cd build && cmake .. -DBUILD_TESTING=ON -DZOSLIB_DIR=/path/to/zoslib)
$ cmake --build buildZ/OS ينشئ النظام V Semaphores وقوائم الرسائل. تستمر هذه على النظام بعد انتهاء العملية ما لم يتم إغلاق حلقة الحدث.
استخدم الأمر ipcrm لمسح موارد System v System V.
انظر الإرشادات للمساهمة.