د فیسبوک خلاص سرچینه سنډر، د CPython یوه فورک چې د انسټاګرام لخوا کارول کیږي

فیسبوک د پروژې سنډر لپاره د سرچینې کوډ خپور کړی، د CPython 3.8.5 فورک، د Python پروګرام کولو ژبې اصلي حواله پلي کول. سنډر د انسټاګرام ځواک لپاره د فېسبوک تولید زیربنا کې کارول کیږي او د فعالیت ښه کولو لپاره اصلاحونه پکې شامل دي.

کوډ د دې لپاره خپور شوی چې د CPython اصلي چوکاټ ته د چمتو شوي اصلاحونو پورټ کولو احتمال په اړه بحث وکړي او د نورو پروژو سره مرسته وکړي چې د CPython فعالیت ښه کولو کې ښکیل دي. فیسبوک د یوې جلا خلاصې سرچینې پروژې په بڼه د سنډر ملاتړ کولو اراده نه لري او کوډ په هغه شکل کې وړاندې کیږي چې دا د شرکت په زیربنا کې کارول کیږي، پرته له اضافي کمبود او اسنادو. دوی د CPython د بدیل په توګه د Cinder ته وده ورکولو هڅه هم نه کوي - د پراختیا اصلي هدف پخپله CPython ته وده ورکول دي.

د سنډر کوډ د تولید په چاپیریال کې د باور وړ او ازمول شوي په توګه یاد شوی، مګر که ستونزې وپیژندل شي، نو تاسو به یې پخپله حل کړئ، ځکه چې فیسبوک تضمین نه کوي چې دا به د بهرنۍ تېروتنې پیغامونو ته ځواب ووايي او غوښتنو ته به ځواب ووايي. په ورته وخت کې، فیسبوک د ټولنې سره رغنده همکاري نه پریږدي او چمتو دی چې څنګه د سنډر نور ګړندی کولو یا د CPython اصلي برخې ته د چمتو شوي بدلونونو لیږد ګړندي کولو څرنګوالي په اړه د نظرونو په اړه بحث وکړي.

په سنډر کې پلي شوي اصلي اصلاحونه:

  • د بایټ کوډ انلاین کیشینګ ("شیډ بایټ کوډ"). د میتود جوهر د داسې شرایطو پیژندل دي چیرې چې یو عادي اپکوډ اجرا کیږي چې مطلوب کیدی شي ، او په متحرک ډول د ګړندي ځانګړي اختیارونو سره د ورته اپکوډ ځای په ځای کول (د مثال په توګه ، په مکرر ډول ویل شوي افعال بدلول).
  • لیواله کورټین ارزونه. د async فنکشن زنګونو لپاره چې سمدلاسه پروسس کیږي (انتظار د انتظار پایله نه لري او فنکشن دمخه د بیرته ستنیدو بیان ته رسي) ، د دې ډول افعالو پایله مستقیم د کورټین رامینځته کولو یا د پیښې لوپ شاملولو پرته بدلیږي. د فېسبوک کوډ کې چې په پراخه کچه async/انتظار کاروي ، د اصلاح کولو پایله شاوخوا 5٪ سرعت کوي.
  • د انفرادي میتودونو او دندو په کچه د JIT انتخابي تالیف (په یو وخت کې میتود). د "-X jit" اختیار یا PYTHONJIT=1 چاپیریال متغیر له لارې فعال شوی او تاسو ته اجازه درکوي د 1.5-4 ځله د ډیری فعالیت ازموینې اجرا کول ګړندي کړئ. څرنګه چې د JIT تالیف یوازې په مکرر ډول اجرا شوي دندو لپاره اړین دی ، نو دا مشوره نه کیږي چې دا په ندرت سره کارول شوي دندو لپاره وکاروئ ، د تالیف سرلیک چې یوازې د برنامې اجرا کول ورو کولی شي.

    د "-X jit-list-file=/path/to/jitlist.txt" یا د چاپیریال متغیر "PYTHONJITLISTFILE=/path/to/jitlist.txt" اختیار له لارې تاسو کولی شئ د دندو لیست سره یو فایل مشخص کړئ د کوم لپاره چې JIT کارول کیدی شي (د لارې بڼه.to.module:funcname یا path.to.module:ClassName.method_name). د دندو لیست چې JIT باید فعال شي د پروفایل پایلو پراساس ټاکل کیدی شي. په راتلونکي کې ، د متحرک JIT تالیف ملاتړ تمه کیږي د فنکشن تلیفونونو فریکونسۍ داخلي تحلیل پراساس ، مګر په انسټاګرام کې د پروسو پیل کولو ځانګړتیاو ته په پام سره ، د JIT تالیف هم په لومړي مرحله کې د فیسبوک لپاره مناسب دی.

    JIT لومړی د Python بایټکوډ د لوړې کچې منځګړیتوب نمایندګۍ (HIR) ته بدلوي، کوم چې د پایتون بایټکوډ سره نږدې دی، مګر د سټیک پر بنسټ د راجستر پر بنسټ مجازی ماشین کارولو لپاره ډیزاین شوی، او د ډول معلومات او اضافي معلومات هم کاروي. د فعالیت مهم توضیحات (لکه د حوالې شمیرل). HIR بیا SSA (جامد واحد دنده) فارم ته بدلیږي او د اصلاح کولو مرحلو څخه تیریږي چې د حوالې شمیرنې پایلې او د حافظې مصرف ډیټا په پام کې نیسي. د پایلې په توګه، د ټیټې کچې منځمهاله استازیتوب (LIR) رامینځته کیږي، د مجلس ژبې ته نږدې. د LIR پراساس د اصلاح کولو بل مرحلې وروسته ، د اسمجیټ کتابتون په کارولو سره د مجلس لارښوونې رامینځته کیږي.

  • د ماډلونو لپاره سخت حالت. په فعالیت کې درې برخې شاملې دي: StrictModule ډول. یو جامد شنونکی چې کولی شي معلومه کړي چې د ماډل اجرا کول د دې ماډل څخه بهر په کوډ باندې هیڅ اغیزه نلري. د ماډل لوډر چې دا معلومه کوي چې ماډلونه په سخت حالت کې دي (کوډ "وارد __strict__" مشخص کوي)، د نورو ماډلونو سره د تقاطع نشتوالي لپاره چک کوي، او سخت ماډلونه په sys.modules کې د StrictModule اعتراض په توګه باروي.
  • Static Python یو تجربه لرونکی بایټکوډ تالیف کونکی دی چې د ډول ځانګړي بایټکوډ رامینځته کولو لپاره ډول تشریحات کاروي چې د JIT تالیف څخه مننه ګړندي پرمخ وړي. په ځینو ازموینو کې، د Static Python او JIT ترکیب د معیاري CPython په پرتله تر 7 ځله پورې د فعالیت ښه والی ښیې. په ډیری حاالتو کې، پایلې اټکل کیږي چې د MyPyC او Cython compilers کارولو ته نږدې وي.

سرچینه: opennet.ru

Add a comment