פייסבוק פרסמה את קוד המקור של סינדר המשמש את אינסטגרם

פייסבוק נחשף לאחרונה דרך פוסט, שחרור קוד המקור של פרויקט סינדר, שזה מזלג של ענף CPython ואת יישום הייחוס העיקרי של שפת התכנות של פייתון.

סינדר משמש בתשתית הייצור של פייסבוק להפעלת אינסטגרם וכולל אופטימיזציות לשיפור הביצועים. הקוד פורסם כדי לדון באפשרות להעביר אופטימיזציות מוכנות למיינסטרים של CPython ולסייע לפרויקטים אחרים לשיפור ביצועי CPython.

פייסבוק מזכירה כי היא לא תתמוך בסינדר כפרויקט קוד פתוח נפרד והקוד מוצג בצורה בה הוא משמש בתשתית החברה, ללא תיעוד נוסף.

סינדר לא מקדם את עצמו כחלופה ל- CPython - מטרת הפיתוח העיקרית היא שיפור ה- CPython עצמו.

הקוד של סינדר נחשב אמין למדי ונבדק בסביבות ייצור, אבל אם אותרו בעיות, יהיה עליהן לפתור אותן לבד, מכיוון שפייסבוק אינה מתחייבת שהיא תגיב להודעות שגיאה חיצוניות. ולמשוך בקשות.

יחד עם זאת, פייסבוק אינה שוללת שיתוף פעולה בונה עם הקהילה ומוכנה לדון ברעיונות כיצד להפוך את סינדר למהיר עוד יותר או כיצד לזרז את העברת השינויים המוכנים למסגרת העיקרית של CPython.

האופטימיזציות העיקריות המיושמות ב- Cinder הן:

  • מטמון מקוון של Bytecode: מהות השיטה היא לזהות סיטואציות אופייניות לביצוע אופקודים הניתנות לביצוע אופטימיזציה דינמית ולהחליף אופקוד זה באפשרויות מיוחדות מהירות יותר.
  • הערכה שגרתית: עבור שיחות פונקציות אסינכרוניות המעובדות באופן מיידי, התוצאה של פונקציות אלה נעקפת ישירות מבלי ליצור קורוטין ומבלי להפעיל לולאת אירועים. בקוד בו משתמשת פייסבוק, בה היא משתמשת בכבדות, האופטימיזציה מובילה לתאוצה של כ -5%.
  • אוסף סלקטיבי של JIT ברמת שיטות ופונקציות בודדות: זה מופעל על ידי האפשרות "-X jit" או משתנה הסביבה PYTHONJIT = 1 ומאפשר לך להאיץ בדיקות ביצוע רבות בפי 1,5 עד 4 פעמים.
    ניתן לקבוע את רשימת הפונקציות שעבורן יש להפעיל JIT על סמך תוצאות הפרופיל. בעתיד צפויה תמיכה באוסף JIT דינמי המבוסס על ניתוח פנימי של תדירות שיחות פונקציות, אך בהתחשב בפרטים של תהליכי השקה באינסטגרם, אוסף JIT מתאים גם לפייסבוק בשלב הראשוני.
    ה- JIT ממיר לראשונה את קוד הביס של פייתון לייצוג ביניים ברמה גבוהה (HIR), שקרוב באופן סביר למצב הביצוע של פיתון, אך נועד להשתמש במכונה וירטואלית מבוססת רשומות ולא במכונה וירטואלית מבוססת רשומות. משתמש במידע סוג ובפרטים נוספים הרלוונטיים לביצועים. לאחר מכן ה- HIR מומר לצורה של הקצאה יחידה סטטית (SSA) ועובר שלבי אופטימיזציה בהתבסס על ספירת הפניות ונתוני שימוש בזיכרון. כתוצאה מכך נוצר ייצוג ביניים ברמה נמוכה (LIR), שקרוב לשפת הרכבה.
  • מצב קפדני למודולים:הפונקציונליות כוללת שלושה מרכיבים: סוג StrictModule. מנתח סטטי המסוגל לקבוע כי ביצוע מודול אינו משפיע על הקוד מחוץ לאותו מודול.
  • פיתון סטטי: הוא מהדר ניסוי Bytecode ניסיוני המשתמש ביאורים מסוגים ליצירת Bytecode הספציפי לכל סוג ועובר מהר יותר באמצעות אוסף JIT. במבחנים מסוימים, השילוב של פיתון סטטי ו- JIT מדגים שיפור ביצועים של עד פי 7 בהשוואה ל- CPython טיפוסי. במצבים רבים, התוצאות מוערכות כאילו נעשה שימוש במהדרים MyPyC ו- Cython.

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


תוכן המאמר עומד בעקרונותינו של אתיקה עריכתית. כדי לדווח על שגיאה לחץ כאן.

היה הראשון להגיב

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

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

*

*

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