libuv, ספרייה חוצת פלטפורמות המשמשת בפרויקטים רבים לתמיכה ב-I/O

ליבוב

libuv היא ספריית תמיכה חוצת פלטפורמות עם התמקדות ב-I/O אסינכרוני.

לאחרונה נודע שחרור הגרסה החדשה של ספריית libuv 1.45.0, אשר נמצא בשימוש נרחב עבור ריבוי חיבורים ועיבוד קלט/פלט אסינכרוני בפרויקטים רבים שמטרתם עיבוד ביצועים גבוהים של בקשות קבצים ורשת, למשל, בפלטפורמת Node.js, BIND 9 ו- Knot.

למי שלא יודע על ליבוב, הוא צריך לדעת שזה היא ספריית C חוצת פלטפורמות המספקת תמיכה ב-I/O אסינכרוני המבוססת על לולאות אירועים. הוא תומך ב-epoll Windows kqueue IOCP, יציאות אירועים של Solaris וב-Linux היא אחת מהספריות שתומכות ב-io_uring.

לגבי ליבוב

ליבוב מיועד בעיקר לשימוש ב-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

שיפור מרכזי בגרסה החדשה הוא הטמעת התמיכה המיוחלת לממשק ה-I/O האסינכרוני של io_uring מסופק על ידי ליבת לינוקס מאז גרסה 5.1.

בנוסף לכך, זה גם מדגיש את תמיכה בסקר I/O ויכולת עבודה עם ובלי חציצה עם ה-API של io_uring, מפתחי הליבה ניסו לטפל בחסרונות של ממשק ה-aio הישן. מבחינת ביצועים, io_uring קרובה מאוד ל-SPDK ועולה משמעותית על libaio כאשר סקר מופעל.

בליבוב, ניתן להשתמש בממשק io_uring בפלטפורמות לינוקס עם ליבה 5.1+ בפרימיטיבים של מניפולציה אסינכרונית של קבצים כגון קריאה, כתיבה, fsync, fdatasync, stat, fstat ו-lstat. במערכות הפעלה אחרות ובמערכות עם גרעינים ישנים יותר, עדיין נעשה שימוש במאגר השרשורים.

מוזכר שמבחני ביצועים הראו ששימוש ב-io_uring ב-libuv יכול להשיג עלייה בביצועים פי 8. העבודה של הוספת io_uring ל-libuv נתמכה על ידי ISC (Internet Systems Consortium), המשתמש בספרייה המדוברת בשרת BIND DNS.

שיפורים אחרים בגרסה החדשה כוללים את הגדרת גודל ערימה בודד של 8 MB עבור מאגר השרשורים בכל הארכיטקטורות ופלטפורמות.

זה גם מודגש הוסיף API חדש uv_metrics_info() לאיסוף מדדים, כגון ספירת האיטרציות בלולאת האירועים, המספר הכולל של אירועים שעובדו ומספר האירועים הממתינים בתור בזמן שליחת הבקשה.

לבסוף, אם אתה מעוניין לדעת יותר על כך, עליך לדעת שקוד הפרויקט כתוב ב-C ומופץ תחת רישיון MIT. אתה יכול לבדוק את הפרטים בקישור הבא. 


השאירו את התגובה שלכם

כתובת הדוא"ל שלך לא תפורסם. שדות חובה מסומנים *

*

*

  1. אחראי לנתונים: מיגל אנחל גטון
  2. מטרת הנתונים: בקרת ספאם, ניהול תגובות.
  3. לגיטימציה: הסכמתך
  4. מסירת הנתונים: הנתונים לא יועברו לצדדים שלישיים אלא בהתחייבות חוקית.
  5. אחסון נתונים: מסד נתונים המתארח על ידי Occentus Networks (EU)
  6. זכויות: בכל עת תוכל להגביל, לשחזר ולמחוק את המידע שלך.