فیس بک اوپن سورسڈ سنڈر، CPython کا ایک کانٹا جسے Instagram استعمال کرتا ہے۔

فیس بک نے سنڈر پروجیکٹ کے لیے سورس کوڈ شائع کیا ہے، جو CPython 3.8.5 سے ایک فورک تیار کرتا ہے، جو Python پروگرامنگ لینگویج کا اہم حوالہ ہے۔ سنڈر کو فیس بک کے پروڈکشن انفراسٹرکچر میں انسٹاگرام سروس کو طاقت دینے کے لیے استعمال کیا جاتا ہے اور اس میں کارکردگی کی اصلاح شامل ہے۔

کوڈ کو CPython کور میں پورٹ کرنے کے لیے تیار کردہ آپٹیمائزیشنز پر بحث کرنے اور CPython کی کارکردگی کو بہتر بنانے والے دیگر پروجیکٹوں کی مدد کے لیے پوسٹ کیا گیا ہے۔ فیس بک سنڈر کو اسٹینڈ لون اوپن سورس پروجیکٹ کے طور پر سپورٹ نہیں کرے گا اور کوڈ کو پیش کیا گیا ہے کیونکہ یہ کمپنی کے انفراسٹرکچر میں استعمال ہوتا ہے، بغیر کسی اضافی اسٹائل اور دستاویزات کے۔ سنڈر کو بھی CPython کے متبادل کے طور پر فروغ نہیں دیا جا رہا ہے - ترقی کا بنیادی ہدف خود CPython کو بہتر بنانے کی خواہش ہے۔

سنڈر کوڈ کو کافی مضبوط سمجھا جاتا ہے اور پیداواری ماحول میں اس کا تجربہ کیا جاتا ہے، لیکن اگر مسائل پائے جاتے ہیں، تو انہیں خود ہی حل کرنا پڑے گا، کیونکہ فیس بک اس بات کی ضمانت نہیں دیتا کہ یہ بیرونی ایرر میسیجز اور پل کی درخواستوں کا جواب دے گا۔ ایک ہی وقت میں، فیس بک کمیونٹی کے ساتھ تعمیری تعاون کو مسترد نہیں کرتا ہے اور سینڈر کو مزید تیز کرنے یا CPython کور میں تیار تبدیلیوں کی منتقلی کو تیز کرنے کے طریقوں پر خیالات پر تبادلہ خیال کرنے کے لیے تیار ہے۔

سنڈر میں لاگو کردہ اہم اصلاحات:

  • ان لائن بائیک کوڈ کیشنگ ("شیڈو بائیک کوڈ")۔ طریقہ کار کا خلاصہ یہ ہے کہ ایک عام اوپکوڈ کے نفاذ کے حالات کی نشاندہی کی جائے جسے بہتر بنایا جا سکتا ہے، اور ایسے اوپکوڈ کو متحرک طور پر تیز تر خصوصی اختیارات کے ساتھ تبدیل کرنا ہے (مثال کے طور پر، اکثر کہلائے جانے والے فنکشنز کو تبدیل کرنا)۔
  • کوروٹینز کی ایکٹیو ایویلیوایشن (ایجر کوروٹائن ایویلیویشن)۔ async فنکشن کالز کے لیے جو فوری طور پر پروسیس کی جاتی ہیں (await انتظار نہیں کرتا اور فنکشن ریٹرن اسٹیٹمنٹ پر پہلے پہنچ جاتا ہے)، ایسے فنکشنز کا نتیجہ کورٹین بنائے بغیر اور ایونٹ لوپ کو شامل کیے بغیر براہ راست بدل دیا جاتا ہے۔ فیس بک کے کوڈ میں جو بہت زیادہ async/await کا استعمال کرتا ہے، اصلاح کے نتیجے میں تقریباً 5% رفتار ہوتی ہے۔
  • انفرادی طریقوں اور افعال کی سطح پر منتخب JIT تالیف (طریقہ وقت میں)۔ یہ "-X jit" آپشن یا PYTHONJIT=1 ماحولیاتی متغیر کے ذریعے فعال ہوتا ہے اور آپ کو کارکردگی کے بہت سے ٹیسٹوں کو 1.5-4 گنا تیز کرنے کی اجازت دیتا ہے۔ چونکہ جے آئی ٹی کی تالیف صرف کثرت سے انجام پانے والے فنکشنز کے لیے متعلقہ ہے، اس لیے اسے شاذ و نادر ہی استعمال کیے جانے والے فنکشنز کے لیے استعمال کرنا نامناسب ہے، جس کی تالیف اوور ہیڈ پروگرام کے عمل کو سست کر سکتی ہے۔

    "-X jit-list-file=/path/to/jitlist.txt" آپشن یا "PYTHONJITLISTFILE=/path/to/jitlist.txt" ماحولیاتی متغیر کے ذریعے، آپ فنکشنز کی فہرست کے ساتھ فائل کی وضاحت کر سکتے ہیں جس کے لیے JIT استعمال کیا جا سکتا ہے (path .to.module:funcname یا path.to.module:ClassName.method_name)۔ ان خصوصیات کی فہرست جن کے لیے جے آئی ٹی کو فعال کیا جانا چاہیے اس کا تعین پروفائلنگ کے نتائج کی بنیاد پر کیا جا سکتا ہے۔ مستقبل میں، فنکشن کالز کی فریکوئنسی کے اندرونی تجزیہ پر مبنی ڈائنامک جے آئی ٹی کمپلیشن کے لیے تعاون کی توقع ہے، لیکن انسٹاگرام پر چلنے والے عمل کی تفصیلات کو مدنظر رکھتے ہوئے، ابتدائی مرحلے میں جے آئی ٹی کی تالیف فیس بک کے لیے بھی موزوں ہے۔

    جے آئی ٹی پہلے پائتھون بائیک کوڈ کو ہائی لیول انٹرمیڈیٹ ریپریزنٹیشن (HIR) میں تبدیل کرتی ہے، جو کہ Python بائیک کوڈ کے کافی قریب ہے، لیکن اسے اسٹیک ون کے بجائے رجسٹر ورچوئل مشین استعمال کرنے کے لیے ڈیزائن کیا گیا ہے، اور کارکردگی کے لیے اہم قسم کی معلومات اور اضافی تفصیلات کا بھی استعمال کرتا ہے۔ (مثال کے طور پر حوالہ شمار) اس کے بعد HIR کو SSA (سٹیٹک سنگل اسائنمنٹ) فارم میں تبدیل کیا جاتا ہے اور یہ اصلاحی مراحل سے گزرتا ہے جو حوالہ شماری کے نتائج اور میموری کی کھپت پر ڈیٹا کو مدنظر رکھتے ہیں۔ نتیجے کے طور پر، ایک نچلی سطح کی انٹرمیڈیٹ نمائندگی (LIR) پیدا ہوتی ہے جو اسمبلی کی زبان کے قریب ہوتی ہے۔ LIR پر مبنی اصلاح کے ایک اور مرحلے کے بعد، asmjit لائبریری کا استعمال کرتے ہوئے اسمبلر ہدایات تیار کی جاتی ہیں۔

  • ماڈیولز کے لیے سخت موڈ۔ فعالیت کے تین اجزاء ہیں: StrictModule قسم۔ ایک جامد تجزیہ کار جو اس بات کا تعین کرنے کی صلاحیت رکھتا ہے کہ ماڈیول کا نفاذ اس ماڈیول سے باہر کوڈ کو متاثر نہیں کرتا ہے۔ ایک ماڈیول لوڈر جو اس بات کا تعین کرتا ہے کہ آیا ماڈیول سخت موڈ پر سیٹ ہیں (کوڈ میں "import __strict__" کی نشاندہی کرتا ہے)، چیک کرتا ہے کہ دوسرے ماڈیولز کے ساتھ کوئی انٹرسیکشن نہیں ہے، اور سخت ماڈیولز کو sys.modules میں StrictModule آبجیکٹ کے طور پر لوڈ کرتا ہے۔
  • Static Python ایک تجرباتی بائیک کوڈ کمپائلر ہے جو ٹائپ اینوٹیشنز استعمال کرتا ہے تاکہ ٹائپ مخصوص بائیک کوڈ تیار کیا جا سکے اور JIT کمپائلیشن کے استعمال کے ذریعے تیزی سے چلایا جا سکے۔ کچھ ٹیسٹوں میں، Static Python اور JIT کا امتزاج عام CPython کے مقابلے میں 7x کارکردگی میں بہتری دکھاتا ہے۔ بہت سے حالات میں، نتائج MyPyC اور Cython کمپائلرز کے قریب ہونے کا اندازہ لگایا جاتا ہے۔

ماخذ: opennet.ru

نیا تبصرہ شامل کریں